Python 使用参数读取sql
有没有关于如何在Pandas中通过SQL查询传递参数的示例 特别是,我使用SQLAlchemy引擎连接到PostgreSQL数据库。到目前为止,我发现以下方法有效:Python 使用参数读取sql,python,sql,pandas,psycopg2,Python,Sql,Pandas,Psycopg2,有没有关于如何在Pandas中通过SQL查询传递参数的示例 特别是,我使用SQLAlchemy引擎连接到PostgreSQL数据库。到目前为止,我发现以下方法有效: df = psql.read_sql(('select "Timestamp","Value" from "MyTable" ' 'where "Timestamp" BETWEEN %s AND %s'), db,params=[datetime(20
df = psql.read_sql(('select "Timestamp","Value" from "MyTable" '
'where "Timestamp" BETWEEN %s AND %s'),
db,params=[datetime(2014,6,24,16,0),datetime(2014,6,24,17,0)],
index_col=['Timestamp'])
Pandas文档说params也可以作为dict传递,但我似乎无法实现这一点,例如:
df = psql.read_sql(('select "Timestamp","Value" from "MyTable" '
'where "Timestamp" BETWEEN :dstart AND :dfinish'),
db,params={"dstart":datetime(2014,6,24,16,0),"dfinish":datetime(2014,6,24,17,0)},
index_col=['Timestamp'])
从Pandas运行这些类型的查询的推荐方法是什么?读取sql文档说此
参数可以是列表、元组或dict(请参阅)
要在sql查询中传递值,可能有不同的语法:?
,:1
,:name
,%s
,%(name)s
(请参阅)。
但并非所有数据库驱动程序都支持所有这些可能性,支持哪种语法取决于您使用的驱动程序(psycopg2
)
在第二种情况下,当使用dict时,您使用的是“命名参数”,根据psycopg2
文档,它们支持%(name)s
样式(因此不是:name
),请参见。
因此,使用这种风格应该是可行的:
df = psql.read_sql(('select "Timestamp","Value" from "MyTable" '
'where "Timestamp" BETWEEN %(dstart)s AND %(dfinish)s'),
db,params={"dstart":datetime(2014,6,24,16,0),"dfinish":datetime(2014,6,24,17,0)},
index_col=['Timestamp'])
这非常有帮助-我使用的是psycopg2,因此“%”(name)的语法非常有效。我们可能应该在docstring中提到这一点:此解决方案不再适用于Postgres-需要使用:表示法,然后确保使用sqlalchemy.text()包装SQL字符串
这在使用SQLAlchemy引擎的SQLite上不起作用。SQLite使用:name
样式,请参阅