¿Hay ejemplos de cómo pasar parámetros con una consulta SQL en Pandas?
En particular, estoy usando un motor SQLAlchemy para conectarme a una base de datos PostgreSQL. Hasta ahora he encontrado que los siguientes trabajos:
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'])
La documentación de Pandas dice que los parámetros también se pueden pasar como un dict, pero parece que no puedo hacer que esto funcione, por ejemplo:
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'])
¿Cuál es la forma recomendada de ejecutar estos tipos de consultas desde Pandas?
Los documentos de read_sql
dicen que este argumento params
puede ser una lista, una tupla o un dict (ver documentos ).
Para pasar los valores en la consulta de SQL, hay diferentes syntax posibles ?
, :1
,: :name
, %s
, %(name)s
(vea PEP249 ).
Pero no todas estas posibilidades son compatibles con todos los controladores de base de datos, cuya syntax es compatible, depende del controlador que esté utilizando ( psycopg2
en su caso, supongo).
En su segundo caso, cuando usa un dict, está usando ‘argumentos con nombre’, y de acuerdo con la documentación de psycopg2
, son compatibles con el estilo de %(name)s
(y, por tanto, no con el :name
que supongo), consulte http: // initd.org/psycopg/docs/usage.html#query-parameters .
Así que usar ese estilo debería funcionar:
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'])