2016-11-05 30 views
1

我試圖運行具有以下作爲證明文本通配符MySQL查詢:如下圖所示如何使用在熊貓通配符(%)read_sql()

import sqlalchemy 
import pandas as pd 

#connect to mysql database 
engine = sqlalchemy.create_engine('mysql://user:@localhost/db?charset=utf8') 
conn = engine.connect() 

#read sql into pandas dataframe 
mysql_statement = """SELECT * FROM table WHERE field LIKE '%part%'; """ 
df = pd.read_sql(mysql_statement, con=conn) 

在運行時出現錯誤與格式有關。

TypeError: not enough arguments for format string

如何在使用熊貓閱讀MySQL時使用通配符?

回答

2

在大熊貓的油煙機,它使用任何SQL引擎你給它來解析聲明。在你的情況是sqlalchemy,所以你需要弄清楚它如何處理%。這可能像用LIKE '%%part%%'逃脫一樣簡單。

在psycopg的情況下,可以使用params變量是這樣的:

mysql_statement = """SELECT * FROM table WHERE field LIKE %s; """ 
df = pd.read_sql(mysql_statement, con=conn, params=("%part%",)) 
0

我個人更喜歡使用新格式(.format)。您的代碼看起來就像這樣:

mysql_statement = """SELECT * FROM table WHERE field LIKE {};""".format(part_var) 

或者用命名參數(有用的,當你有多個參數):

mysql_statement = """SELECT * FROM table WHERE field LIKE {part}; """.format(part=part_var) 
+0

其實我試過,昨天得到了同樣的錯誤,因爲這個問題似乎沒有要與字符串,但(就像我看到的那樣)read_sql()如何將百分號解釋爲在字符串中插入變量的舊方法,而不是將傳遞的字符串作爲顯式的sql語句讀取。 –

+1

@JasonMeloHall看看這個然後:http://stackoverflow.com/a/39490030/6866692 – Nikita

+0

這允許你直接傳遞參數到你的數據庫驅動程序(例如,psycopg2 postgresql)。 官方熊貓文檔: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_sql.html – Nikita