ホームページ >データベース >mysql チュートリアル >Pandas `read_sql` を使用して名前付きパラメータを PostgreSQL データベースに正しく渡すにはどうすればよいですか?

Pandas `read_sql` を使用して名前付きパラメータを PostgreSQL データベースに正しく渡すにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-18 07:27:08819ブラウズ

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

Pandas read_sql を使用して SQL クエリ パラメーターを渡します

Pandas は、SQL データベースからデータを取得するための read_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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。