2017-10-20 58 views
1

新的Python和熊貓而言,我面臨着以下問題:如何將多個ID插入到sql語句中?

我想多字符串傳遞到SQL查詢和奮鬥插入分隔符「」:

Example data 

import pandas as pd 

data = [['Alex',10],['Bob',12],['Clarke',13]] 
df = pd.DataFrame(data,columns=['Name','Age']) 
print (df) 

# Remove header (Not sure whether that is necessary) 
df.columns = df.iloc[0] 


pd.read_sql(

    """ 
SELECT 
* 

FROM emptable 
WHERE empID IN ('{}',) 

    """.format(df.ix[:, 0]), # Which corresponds to 'Alex','Bob','Clarke' 

    con = connection) 

我嘗試不同的組合但是,他們中沒有一個能夠解決問題。

回答

2

演示:

sql_ = """ 
SELECT * 
FROM emptable 
WHERE empID IN ({}) 
""" 

sql = sql_.format(','.join([x for x in ['?'] * len(df)])) 
print(sql) 

new = pd.read_sql(query, conn, params=tuple(df['Name'])) 

輸出:

In [166]: print(sql) 

SELECT * 
FROM emptable 
WHERE empID IN (?,?,?) 

注意:如果您的DF大這種做法是行不通的,因爲生成的SQL字符串是太大。

在這種情況下,你可以保存/在助手臨時錶轉儲名稱和SQL使用它:

df[['Name']].to_sql('tmp', conn, if_exists='replace') 

sql = """ 
SELECT * 
FROM emptable 
WHERE empID IN (select Name from tmp) 
""" 
new = pd.read_sql(sql, conn) 
+0

感謝您的回答。你怎麼能確定'Alex','Bob','Clarke'是作爲字符串傳遞的。知道你的代碼不包含任何明確的引號。至少這是MySQL的語法,如果傳遞一個字符串。 – Mamba

+0

@Mamba,你不需要 - 它會自動完成 – MaxU