Django+PostgreSQLでcursorで変数としてListを指定したいとき
今回はDjango+PostgreSQLの環境でcursorで生のSQLを流す際に変数としてListを入れてあげたい場合はどのようにするかについてご紹介いたします。
Django+PostgreSQLでcursorで変数としてListを指定したいとき
あくまで例ですが、下記のような生のSQLをDjango+PostgreSQL環境で流したいとします。
1 |
connection.cursor().execute('select * from test_table where id in %s', testList) |
しかし、これではSQLでエラーが出てしまいます。
Django+PostgreSQL環境の場合、Listを変数として渡してあげると内部で
1 |
ARRAY['test1', 'test2', 'test3'] |
のような変換がされてしまいます。
サンプルの例だと、
1 |
select * from test_table where id in ARRAY['test1', 'test2', 'test3'] |
のようなSQLが発行されてしまうわけです。
結論を言うと、Listを変数として渡してあげるパターンがある場合はSQLでANY句を用いて検索などするようにしましょう。
1 |
connection.cursor().execute('select * from test_table where id = any(%s)', testList) |
終わりに
今回はDjango+PostgreSQLの環境でcursorで生のSQLを流す際に変数としてListを入れてあげたい場合はどのようにするかについてご紹介いたしました。
ディスカッション
コメント一覧
まだ、コメントがありません