2017-04-11 35 views
1

我有一個包含值一列的數據幀,我希望把它作爲執行下面的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,表值參數可能是要走的路。 –

回答

1

這是否得到您需要的?

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) 
0
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

考慮添加關於您發佈的代碼的工作方式的描述,這對未來訪問此帖的用戶會有所幫助。 –

相關問題