簡體   English   中英

帶參數的 Pandas read_sql

[英]Pandas read_sql with parameters

有沒有關於如何在 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'])
import psycopg as pg
import pandas.io.sql as iosql
conn = pg.connect("...")
iosql.read_sql("select a,b from c where d = %s", conn, params=["dval"])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM