2016-11-05 51 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