2017-04-11 16 views
1

私は値の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

あなたが投稿したコードがどのように機能するかの説明を追加することを検討してください、将来この投稿を訪れるユーザーにとっては役立ちます。 –

関連する問題