如何在 pandasql 查询中使用动态变量(元组)?
How to use dynamic variables(tuple) in pandasql query?
number_tuple = (1,4,6,3)
sensex_quaterly_df = psql.sqldf("SELECT * 来自 sensex_df
其中 'Num' 在 ('number_tuple')")
“这里 number_tuple 有我想从 sensex_df 数据库中检索的值”
因为 pandasql
允许您 运行 SQL 在数据帧上,您可以使用 SQL 将元组的连接值构建成 comma-separated 字符串 string.join()
.
number_tuple = (1,4,6,3)
in_values = ", ".join(str(i) for i in number_tuple)
sql = f"SELECT * FROM sensex_df WHERE Num IN ({in_values})"
sensex_quaterly_df = psql.sqldf(sql)
但是,如果您使用实际的关系数据库作为后端,则不建议使用串联的 SQL 字符串。如果是这样,请在开发准备好的 SQL 语句时使用参数化,其中包含 %s
或 ?
等占位符以及后续步骤绑定值。下面以 pandas read_sql
:
进行演示
number_tuple = (1,4,6,3)
in_values = ", ".join('?' for i in number_tuple)
sql = f"SELECT * FROM sensex_df WHERE Num IN ({in_values})"
sensex_quaterly_df = pd.read_sql(sql, conn, params=number_tuple)
number_tuple = (1,4,6,3)
sensex_quaterly_df = psql.sqldf("SELECT * 来自 sensex_df
其中 'Num' 在 ('number_tuple')")
“这里 number_tuple 有我想从 sensex_df 数据库中检索的值”
因为 pandasql
允许您 运行 SQL 在数据帧上,您可以使用 SQL 将元组的连接值构建成 comma-separated 字符串 string.join()
.
number_tuple = (1,4,6,3)
in_values = ", ".join(str(i) for i in number_tuple)
sql = f"SELECT * FROM sensex_df WHERE Num IN ({in_values})"
sensex_quaterly_df = psql.sqldf(sql)
但是,如果您使用实际的关系数据库作为后端,则不建议使用串联的 SQL 字符串。如果是这样,请在开发准备好的 SQL 语句时使用参数化,其中包含 %s
或 ?
等占位符以及后续步骤绑定值。下面以 pandas read_sql
:
number_tuple = (1,4,6,3)
in_values = ", ".join('?' for i in number_tuple)
sql = f"SELECT * FROM sensex_df WHERE Num IN ({in_values})"
sensex_quaterly_df = pd.read_sql(sql, conn, params=number_tuple)