gpt4 book ai didi

python - 带参数的 Pandas read_sql

转载 作者:IT老高 更新时间:2023-10-28 20:36:45 26 4
gpt4 key购买 nike

有没有关于如何在 Pandas 中通过 SQL 查询传递参数的示例?

特别是我使用 SQLAlchemy 引擎连接到 PostgreSQL 数据库。到目前为止,我发现以下工作:

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 运行这些类型的查询的推荐方法是什么?

最佳答案

read_sql 文档说这个 params 参数可以是列表、元组或字典(参见 docs)。

要在 sql 查询中传递值,可以使用不同的语法:?:1:name %s%(name)s(见 PEP249)。
但并非所有数据库驱动程序都支持所有这些可能性,支持哪种语法取决于您使用的驱动程序(我想在您的情况下为 psycopg2)。

在第二种情况下,当使用字典时,您使用的是“命名参数”,根据 psycopg2 文档,它们支持 %(name)s样式(所以不是 :name 我想),见 http://initd.org/psycopg/docs/usage.html#query-parameters .
所以使用这种风格应该可以工作:

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'])

关于python - 带参数的 Pandas read_sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24408557/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com