Maison >base de données >tutoriel mysql >Comment transmettre correctement les paramètres nommés avec Pandas `read_sql` à une base de données PostgreSQL ?

Comment transmettre correctement les paramètres nommés avec Pandas `read_sql` à une base de données PostgreSQL ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-18 07:27:08819parcourir

How to Correctly Pass Named Parameters with Pandas `read_sql` to a PostgreSQL Database?

Utilisez Pandas read_sql pour transmettre les paramètres de requête SQL

Pandas fournit la fonction read_sql pour récupérer des données à partir d'une base de données SQL. Cette fonction permet de transmettre des paramètres à la requête SQL, permettant ainsi des requêtes dynamiques. Cependant, la méthode de transmission des paramètres peut différer.

L'exemple utilise le moteur SQLAlchemy pour se connecter à la base de données PostgreSQL. La requête utilise BETWEEN %s AND %s comme paramètre de position et peut fonctionner normalement.

Cependant, la question est de savoir s'il est possible de transmettre des paramètres nommés à l'aide d'un dictionnaire, tels que :dstart et :dfinish. La documentation Pandas souligne cette possibilité, mais en pratique, elle échoue.

Selon la documentation read_sql, le paramètre params peut accepter une liste, un tuple ou un dictionnaire. Il existe également diverses syntaxes pour transmettre des valeurs dans la requête SQL elle-même, notamment ?, :1, :name, %s et %(name)s.

Surtout, la syntaxe prise en charge dépend du pilote de base de données utilisé. Dans ce cas, le pilote est très probablement psycopg2.

La documentation de psycopg2 montre que les paramètres nommés sont pris en charge en utilisant le style %(name)s, plutôt que le style :name qui a été tenté. Par conséquent, le code suivant devrait fonctionner :

<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>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn