ホームページ >データベース >mysql チュートリアル >Pandas `read_sql` を使用して名前付きパラメータを PostgreSQL データベースに正しく渡すにはどうすればよいですか?
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 サイトの他の関連記事を参照してください。