リスト(countryList)をSQLステートメントの%s経由で使用できるようにする正しい方法は何ですか?
# using psycopg2
countryList=['UK','France']
sql='SELECT * from countries WHERE country IN (%s)'
data=[countryList]
cur.execute(sql,data)
現在のところ、「WHERE country in(ARRAY [...])」を実行しようとするとエラーになります。文字列操作以外でこれを行う方法はありますか?
ありがとう
答えを少し拡張し、名前付きパラメーターに対処し、リストをタプルに変換するには:
countryList = ['UK', 'France']
sql = 'SELECT * from countries WHERE country IN %(countryList)s'
cur.execute(sql, { # You can pass a dict for named parameters rather than a Tuple. Makes debugging hella easier.
'countryList': Tuple(countryList), # Converts the list to a Tuple.
})
以下のようにpythonリストを直接使用できます。SQLのIN演算子のように機能し、エラーをスローすることなく空のリストを処理します。
data=['UK','France']
sql='SELECT * from countries WHERE country = ANY (%s)'
cur.execute(sql,(data,))
ソース: http://initd.org/psycopg/docs/usage.html#lists-adaptation