データベースからフェッチする行のIDのリストがあります。私はPythonとpsycopg2を使用しています。私の問題は、これらのIDをSQLに効果的に渡す方法です。私は、リストの長さを知っていれば、必要に応じて手動または自動で多くの "%s"式をクエリ文字列に追加できるので簡単ですが、ここではどれだけ必要なのか分かりません。 sql "id IN(id1、id2、...)"文を使用してその行を選択する必要があることは重要です。リストの長さをチェックし、適切な数の "%s"をクエリ文字列に連結することは可能ですが、非常に遅くて醜いのではないかと恐れています。誰かがそれを解決する方法のアイデアを持っていますか?なぜ私は "IN"ステートメントでそれを行う必要があるのか尋ねないでください。それは私のクラス割り当ての一部であるベンチマークです。前もって感謝します!psycopg2のSQLへのパラメータリストの受け渡し
答えて
Pythonのタプルはpsycopg2のSQLリストに変換されます。
cur.mogrify("SELECT * FROM table WHERE column IN %s;", ((1,2,3),))
う出力Pythonの新規参入については
'SELECT * FROM table WHERE column IN (1,2,3);'
:タプルではなく、ここにリストを使用するには、残念ながら重要です。 2番目の例:
cur.mogrify("SELECT * FROM table WHERE column IN %s;",
tuple([row[0] for for in rows]))
ありがとう、私はそれに気付かなかった。あなたの解決策の唯一の問題は、そのタプルでカンマを忘れてしまったことです。 –
thanks - fixed it – philofinfinitejest
Python LISTSはPostgres ARRAY型に変換されるので、私はcursor.execute(...)引数に(tuple(SOME_LIST))のようなことを頻繁に行う必要があることがわかります。リストのtuple()を単一要素のリテラルタプルにラップする方法に注意してください。この例ではタプルのタプルがあります。 –
- 1. IN SQL文へのパラメータの受け渡し
- 2. SQLからMVCへのデータの受け渡しSystem.String []エラー
- 3. SQLからWCFへの値の受け渡し
- 4. SQL Server 2008へのパラメータの受け渡し
- 5. アクセス2010フロントエンドSQL Serverへのクエリの受け渡し2014バックエンド
- 6. メインレポートからドリルスルーへのパラメータの受け渡しSQL Serverレポートビルダー3.0
- 7. SQLからSwiftmailerへの配列の受け渡し
- 8. SQLクエリへのMDXパラメータの受け渡し
- 9. レイアウトページへのデータの受け渡し
- 10. ディレクティブへの式の受け渡し
- 11. ビューへの値の受け渡し
- 12. 子へのメソッドの受け渡し
- 13. ReactJs - イベントハンドラへのパラメータの受け渡し
- 14. プロミスチェーンへのパラメータの受け渡し
- 15. ハンドルバーへの式の受け渡しカスタムヘルパー
- 16. WebClient.DownloadFileCompletedイベントへのパラメータの受け渡し
- 17. WebMethodへのjqueryデータの受け渡し
- 18. サブルーチンへのオプションパラメータの受け渡し
- 19. ディレクティブへの変数の受け渡し
- 20. WCFメタデータへのパラメータの受け渡し
- 21. マップへのselectInput値の受け渡し
- 22. Vue.jsコンポーネントへのデータの受け渡し
- 23. アクションメソッドへのパラメータの受け渡し
- 24. ポップアップウィンドウへのビューステートデータの受け渡し
- 25. への変数の受け渡し
- 26. phpへのPythonリストの受け渡し
- 27. ファブリックタスクへのパラメータの受け渡し
- 28. デリゲートへの値の受け渡し
- 29. JinjaマクロへのHTMLの受け渡し
- 30. 関数へのコマンドの受け渡し
SQLの回答に反対していますか?動的SQLを使用すると、任意の長さの文字列を指定し、SQLに正しく読み込ませることができます。 – Twelfth