如何将数据框作为参数传递给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,因此查询需要像我一样格式化。

+0

现在你已经指定了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) 
+0

谢谢,但我忘了说我正在使用Microsoft SQL Server,因此查询需要按照我的问题进行格式化。 – Arthurim

+0

这是一样的...... – user2722968

+1

考虑添加关于您发布的代码的工作方式的描述,这对未来访问此帖的用户会有所帮助。 –