如何在 Pandas read_sql() 中使用通配符 (%)
Posted
技术标签:
【中文标题】如何在 Pandas read_sql() 中使用通配符 (%)【英文标题】:How to Use a Wildcard (%) in Pandas read_sql() 【发布时间】:2017-03-19 10:41:37 【问题描述】:我正在尝试运行一个包含文本通配符的 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 时如何使用通配符?
【问题讨论】:
【参考方案1】:您需要在 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 + '%',))
【讨论】:
【参考方案2】:'select * from _table_ where "_column_name_" like 'somethin%' order by... '
在_column_name_ 周围加上“”为我解决了这个问题。
【讨论】:
【参考方案3】: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() 函数
【讨论】:
会导致argument 1 must be a string or unicode object: got TextClause instead
【参考方案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%",))
【讨论】:
以上是关于如何在 Pandas read_sql() 中使用通配符 (%)的主要内容,如果未能解决你的问题,请参考以下文章
在 pandas 中为 read_sql 指定 dtypes
Pandas函数read_sql()在最终的sql查询中插入参数引用[duplicate]