2017-03-22 6 views
0

sqliteコマンドにメソッドパラメータを渡そうとしていますが、問題があります。含むSqlite3 Pythonに値を渡す

私が試してみましたいくつかの異なる方法が:

c.execute('''SELECT ?, count(*) 
      FROM posts 
      GROUP BY 1''', (var,)) 

c.execute('''SELECT :variable, count(*) 
      FROM posts 
      GROUP BY 1''', {"variable" : var}) 

私はこの上python docsを見て、私はそれらを以下のいと信じています。

これらのメソッドは、列を選択しますが、langは、列と渡される変数の値の名前です

[('lang', 3284469)] 

を返しません両方。これは、より多くの

[('en', 3289)] 
[('es', 845)] 
.... 
[('ze', 39)] 

のようになります。私は作業を取得することができた唯一の方法は次のとおりです。

c.execute('''SELECT '''+var+''', count(*) 
      FROM posts 
      GROUP BY 1''') 

私はこれを行うには良い方法があり、これには特に満足していませんか?私は間違って何をしていますか?ありがとう

+0

列名または表名にはパラメーター置換を使用できません。連結または補間はそれを行う唯一の方法です。 –

+0

補間はどういう意味ですか?ありがとう – kopo222

+0

通常のPython文字列メソッド、 '" SELECT {} FROM posts ".format(var)' 'のように。 –

答えて

0

これは、パラメータ化された要求が動作する方法ではありません。 の値はで、識別子では使用しないでください。これは、要求パラメータが列名でもテーブル名でもなく、where節またはhaving節でのみ発生することを意味します。

ですから、列名やテーブル名が変数になりたい場合は、あなたが動的に要求文字列を構築する必要があり、そしてあなたが句が動的にする場所に値をするとき、あなたはパラメータを使用します。

c.execute('''SELECT '''+var+''', count(*) as total 
      FROM posts 
      GROUP BY 1 
      HAVING total > ?''', (minval,))