如何将数据框作为参数传递给Python中的SQL查询?
我有一个包含值一列的数据帧,我希望把它作为执行下面的SQL查询参数:如何将数据框作为参数传递给Python中的SQL查询?
query = "SELECT ValueDate, Value"\
"FROM Table "\
"WHERE [ID] in (?) "
于是,我就(其中包括许多其他的事情)以下内容:
df = pd.read_sql_query(query, conn, params=[ df['ID'].values ])
df = pd.read_sql_query(query, conn, params=[ df['ID'].tolist ])
df = pd.read_sql_query(query, conn, params=[ list(df['ID'].values) ])
...
什么是传递数据帧值的正确方法?
注意:我正在使用Microsoft SQL Server,因此查询需要像我一样格式化。
这是否得到您需要的?
import pandas as pd
your_column = pd.Series([1,2,3,4,5,6,7,8,9])
query = "SELECT ValueDate, Value"\
"FROM Table "\
"WHERE [ID] in {}".format(tuple(your_column))
print(query)
# 'SELECT ValueDate, ValueFROM Table WHERE [ID] in (1, 2, 3, 4, 5, 6, 7, 8, 9)'
然后,你应该能够查询没有进一步的参数。
df = pd.read_sql_query(query, conn)
params = tuple(df['ID'].values)
sql = "SELECT COUNT(*) FROM foobar WHERE id IN (%s)" % (",".join(["?"]*len(params)),)
cursor.execute(sql, params)
谢谢,但我忘了说我正在使用Microsoft SQL Server,因此查询需要按照我的问题进行格式化。 – Arthurim
这是一样的...... – user2722968
考虑添加关于您发布的代码的工作方式的描述,这对未来访问此帖的用户会有所帮助。 –
现在你已经指定了sql-server,表值参数可能是要走的路。 –