2012-09-28 67 views
0

工作我與現在的python的mysqlMySQL的:查詢集是不是在Python

我有一個問題在這裏工作是MySQL查詢

query = 'SELECT * FROM callerdetail WHERE screenname="1" AND status="0"AND agent ='idd' 

我在哪裏從外部源獲取IDD但每當我我試圖執行這個查詢

我收到錯誤

File "server.py", line 28 
    query = 'SELECT * FROM callerdetail WHERE screenname="1" AND status="0"AND agent ='idd' 
                         ^
SyntaxError: invalid syntax 

請幫我出世界衛生大會TI可能做錯了

回答

2

你需要使用的查詢參數:

query = 'SELECT * FROM callerdetail WHERE screenname="1" AND status="0"AND agent =?' 

然後在值執行查詢時傳爲idd

cursor.execute(query, (idd,)) 

在Python中,你不能簡單地只需在各種字符串之間插入一個變量,並希望它插入。

做定期的串插,可以使用.format() method

query = 'SELECT * FROM callerdetail WHERE screenname="1" AND status="0"AND agent = "{0}"'.format(idd) 

但你會錯過了數據庫查詢優化器準備的發言。如果重複使用,預處理語句的執行速度會更快。

+0

所以對,你有你會多個變量更復雜的查詢只需將變量添加到元組中? – b10hazard

+0

@raido:我仍然使用多個'''查詢參數,並在'.execute(query,tuple_of_parameters)'調用中使用這些值。 –

+0

啊我看到了,所以它從元組中依次取出?所以第一個?會採取元組[0]和第二個?會採取元組[1]? – b10hazard

0

您正在混合雙引號和單引號。

的,而不是...

query = 'SELECT * FROM callerdetail WHERE screenname="1" AND status="0"AND agent = 'idd' 

使用...

query = 'SELECT * FROM callerdetail WHERE screenname="1" AND status="0"AND agent = "idd"' 

而且,國際長途直撥變量?如果這是你需要做的......

query = 'SELECT * FROM callerdetail WHERE screenname="1" AND status="0"AND agent = "'+str(idd)+'"' 
+0

是啊多數民衆贊成我的答案 – user1667633

+0

我的答案實際上是兩個答案:D我不知道如果idd是一個變量或代理的實際SQL值,所以我建議第二個轉換idd爲串聯字符串。 – b10hazard

0

看來你忘了Concat的查詢的製作外部變量,

query = 'SELECT * FROM callerdetail WHERE screenname="1" AND status="0"AND agent = "'+idd+'"'