Pandas read_sql con parámetros

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