2013-03-27 57 views
0

我正在編寫一個程序,其中從QCombobBoxes中選擇了兩個變量,這些變量都填充了MySQL查詢的結果。然後我將這些變量插入一個MySQLdb語句中,該語句將變量插入到不同的MySQL表中。第一個變量工作正常,但是在第二我得到這個錯誤,PyQt組合框結果在MySQL中不起作用

TypeError: 'NoneType' object has no attribute '__getitem__' 

的代碼是兩個變量相同的,不同的名稱

name = str(self.item_name.currentText()) 
cur.execute("SELECT item_id FROM Items WHERE name = '%s';"), name 
db.commit() 
results = cur.fetchone() 
item_name = results[0] 

personnel_name = str(self.purchaser_name.currentText()) 
cur.execute("SELECT personnel_id FROM Personnel WHERE name = '%s';"), personnel_name 
db.commit() 
results = cur.fetchone() 
purchaser_id = results[0] 

除外擺弄它之後,它看起來像cur.execute("SELECT item_id FROM Items WHERE name = '%s';"), name插入一個額外的引號圍繞價值取代%s有人知道爲什麼它這樣做,以及如何阻止它?我編寫了兩個變量完全一樣,而且似乎name是從MySQL

獲得一個額外的引號對這個代碼填充QComboBox:

#Get list of items currently in the database 
    cur = db.cursor() 
    cur.execute("SELECT name FROM Items") 
    db.commit() 
    results = cur.fetchall() 
    for name in results: 
     self.item_name.addItem(name[0]) 

    #Get list of purchaser names 
    cur.execute("SELECT name FROM Personnel") 
    db.commit() 
    results = cur.fetchall() 
    for name in results: 
     self.purchaser_name.addItem(name[0]) 

如果我手動插入一個變量,它工作正常。例如:cur.execute("SELECT item_id FROM Items WHERE name = 'Wire';")只有當我使用字符串格式與%s發生錯誤發生。

+0

我正在使用Python 2.7。這可能是錯誤的,但是我在這些情況下學會了使用'%'。 – sommerjj 2013-03-27 22:15:39

+0

它應該是'cur.execute(「SELECT item_id FROM Items WHERE name ='%s';」,(name,))''它可能mysql驅動程序自動將%s作爲引用字符串包裝 – 2013-03-27 22:42:27

回答

0
c.execute("SELECT * FROM sometable WHERE some_condition=?","My Condition") 

您應該始終使用?對於這種事情的佔位符

[編輯]

嘗試1. cur.execute("SELECT item_id FROM Items WHERE name = '%s';"%(name,))

或2 cur.execute("SELECT item_id FROM Items WHERE name = %s;", (name,))

從我簡短的閱讀,我認爲MySQL驅動程序會自動報價%的論點 我的結論是,cur.execute("SELECT item_id FROM Items WHERE name = %s;", (name,))是最正確的方法來做到這一點(以避免注入等)。

+0

我試過了,遇到了MySQL語法錯誤。佔位符失敗。 '1064,「你的SQL語法有錯誤;請查看與你的MySQL服務器版本相對應的手冊,以找到在'?'附近使用的正確語法。在第1行「'我使用了幾乎與我用於其他變量的完全相同的代碼,並且它工作正常。 – sommerjj 2013-03-27 22:19:30

+0

oreally?以及我感到羞怯... – 2013-03-27 22:37:52