我正在尝试运行一个带有文本通配符的MySQL查询,如下所示:
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:格式字符串
的参数不足
如何在使用Pandas阅读MySQL时使用外卡?
答案 0 :(得分:4)
在pandas的引擎下,它正在使用你给它的任何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%",))
答案 1 :(得分:1)
from sqlalchemy import create_engine, text
import pandas as pd
mysql_statement = """SELECT * FROM table WHERE field LIKE '%part%'; """
df = pd.read_sql( text(mysql_statement), con=conn)
您可以使用sqlalchemy中的text()函数
答案 2 :(得分: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)
答案 3 :(得分:0)
'select * from _table_ where "_column_name_" like 'somethin%' order by... '
在“ _column_name_”周围加上“”可以为我解决此问题。
答案 4 :(得分:0)
您需要在read_sql pandas方法中使用params选项。
# string interpolate
mysql_statement = """SELECT * FROM table WHERE field LIKE %s; """
df = pd.read_sql(mysql_statement, con=conn, params=("%part%",))
# variable interpolate
# string interpolate
val = 'part'
mysql_statement = """SELECT * FROM table WHERE field LIKE %s; """
df = pd.read_sql(mysql_statement, con=conn, params=('%' + val + '%',))