使用 Pandas read_sql 传递 SQL 查询参数
Pandas 提供了 read_sql
函数用于从 SQL 数据库中检索数据。此函数允许向 SQL 查询传递参数,从而实现动态查询。但是,传递参数的方法可能有所不同。
示例中使用了 SQLAlchemy 引擎连接到 PostgreSQL 数据库。查询使用 BETWEEN %s AND %s
这种位置参数的方式,能够正常工作。
然而,问题在于是否可以使用字典传递命名参数,例如 :dstart
和 :dfinish
。Pandas 文档指出这种可能性,但实际操作却失败了。
根据 read_sql
文档,params
参数可以接受列表、元组或字典。SQL 查询本身中传递值的语法也多种多样,包括 ?
、:1
、:name
、%s
和 %(name)s
。
至关重要的是,支持的语法取决于所使用的数据库驱动程序。在本例中,驱动程序很可能是 psycopg2。
psycopg2 文档显示,命名参数使用 %(name)s
风格支持,而不是尝试使用的 :name
风格。因此,以下代码应该可以工作:
<code class="language-python">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'])</code>
以上是如何使用 Pandas `read_sql` 正确地将命名参数传递到 PostgreSQL 数据库?的详细内容。更多信息请关注PHP中文网其他相关文章!