带有参数的熊猫read_sql

发布于 2021-01-29 15:08:34

是否有任何示例说明如何在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'])

建议从熊猫运行这些类型的查询的方法是什么?

关注者
0
被浏览
84
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

    通过在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'])
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看