2012-02-27 10 views
2

mysqlからかなり複雑なクエリを取り戻そうとしています。接続が正常に機能していて、値をハードコードすると正常にクエリを完了できます。クエリにPython変数を挿入する

私はpython変数の値の1つを作りたいと思っています。ここで見つけた方法に従っています:How to use variables in SQL statement in Python?リストされたusecaseは私のものとほとんど同じようです。

私が使用しているmysqlの実行関数は、解決された問題とは異なり、実行呼び出しにPython変数をどこに配置するのかわかりません。

マイコード:

targetPUID = "fmt/123" 

cur.execute(""" 
(
SELECT `PUID`,`DROID_V`,`SIG_V`,`SPEED`, 
COUNT(distinct IF(sourcelist.hasExtension=1,NAME,NULL)) as Ext, 
COUNT(distinct IF(sourcelist.hasExtension=0,NAME,NULL)) as NoExt, 
COUNT(distinct NAME) as `All` 
FROM sourcelist, main_small 
WHERE sourcelist.SourcePUID ="%s" AND main_small.NAME = sourcelist.SourceFileName 
GROUP BY `PUID`,`DROID_V`,`SIG_V`,`SPEED` ORDER BY `DROID_V` ASC, `SIG_V` 
) 
""") 

私は、クエリで%sと連携するために私の変数targetPUIDへの参照を配置する必要があります知っています。

___________________FIXED___________________

OK、それが働いて得た:私はまだ修正を追加するのに十分な担当者を持っていない

cur.execute(""" 
(
SELECT `PUID`,`DROID_V`,`SIG_V`,`SPEED`, 
COUNT(distinct IF(sourcelist.hasExtension=1,NAME,NULL)) as Ext, 
COUNT(distinct IF(sourcelist.hasExtension=0,NAME,NULL)) as NoExt, 
COUNT(distinct NAME) as `All` 
FROM sourcelist, main_small 
WHERE sourcelist.SourcePUID =%s AND main_small.NAME = sourcelist.SourceFileName 
GROUP BY `PUID`,`DROID_V`,`SIG_V`,`SPEED` ORDER BY `DROID_V` ASC, `SIG_V` 
) 
""",targetPUID) 

targetPUID = "x-fmt/409" 

を。読んでくれてありがとう。

答えて

2

試してみてください。

cur.execute(""" 
(
SELECT `PUID`,`DROID_V`,`SIG_V`,`SPEED`, 
COUNT(distinct IF(sourcelist.hasExtension=1,NAME,NULL)) as Ext, 
COUNT(distinct IF(sourcelist.hasExtension=0,NAME,NULL)) as NoExt, 
COUNT(distinct NAME) as `All` 
FROM sourcelist, main_small 
WHERE sourcelist.SourcePUID = %s AND main_small.NAME = sourcelist.SourceFileName 
GROUP BY `PUID`,`DROID_V`,`SIG_V`,`SPEED` ORDER BY `DROID_V` ASC, `SIG_V` 
) 
""",(int(targetPUID),)) 
+0

私はそれを試してみましたが、空リストを返す - '()'ありがとうございます。 –

+0

'%s'をクエリの' targetPUID'の値に置き換えて、SQLアプリケーションで手動で実行して、クエリが機能するかどうかを確認してください。 – enderskill

+0

Yupe、このPythonメソッドを使って手動で実装したときはうまく動作するので、変数aspectを知っています。 –

1
cur.execute(..., (targetPUID,)) 
+0

を私は 'それ行くが、ちょうど私と空のリスト返しました() ''%s'を変数の中のスティングに代入すれば、私は期待どおり完全なリストを取得します。しかし、ありがとう。 –

1

OK、それが働いてしまった:

cur.execute(""" 
(
SELECT `PUID`,`DROID_V`,`SIG_V`,`SPEED`, 
COUNT(distinct IF(sourcelist.hasExtension=1,NAME,NULL)) as Ext, 
COUNT(distinct IF(sourcelist.hasExtension=0,NAME,NULL)) as NoExt, 
COUNT(distinct NAME) as `All` 
FROM sourcelist, main_small 
WHERE sourcelist.SourcePUID =%s AND main_small.NAME = sourcelist.SourceFileName 
GROUP BY `PUID`,`DROID_V`,`SIG_V`,`SPEED` ORDER BY `DROID_V` ASC, `SIG_V` 
) 
""",targetPUID) 

targetPUID = "x-fmt/409" 
+0

@セセーター私は許可されるとすぐにやります(もう23時間 - 申し訳ありません) - 私は十分な担当者がいません。 –

関連する問題