2011-11-03 13 views
11

SQLクエリで可変長のプレースホルダを使用する方法はありますか? 3組でPythonのSQLite3呼び出しで可変長プレースホルダを取得する方法

今は、私はこのような何かを書く:

c.execute('SELECT * FROM table WHERE word IN (?, ?, ?)', tup) 

しかしTUPは、長さの異なる何をすることができれば、おそらく4タプルまたは2タプル?このような状況でプレースホルダを使用するための構文はありますか?そうでない場合、コードを書くための好ましい方法は何ですか?

答えて

12

あなたは(あなたの例を使用する)は、このような何かをする必要があると思います:

tup = ... # some sequence/tuple of unknown length 
sql = 'SELECT * FROM table WHERE word IN (%s)' % ', '.join('?' for a in tup) 
c.execute(sql, tup) 

この方法で使用すると、動的プレースホルダのリストを作成し、sqlite3のモジュールは、それを解析する前に、SQL文字列の書式を設定しています。

+0

私はそこにいたいと思っていましたか?またはこのようなもののための?*変種ですが、あなたの提案はうまくいくでしょう。 –

+3

私はあまり明確ではないようですが、私は ''、'。 'を.in'のように' '、 ''、 ''、 ''として登録します。 – Duncan

+3

@Duncan:Idunnoより多くの信号ノイズ。生成者の理解度が英語のようになっているようです。 – rossipedia

関連する問題