Python PyQt组合框结果在MySQL中不起作用

Python PyQt组合框结果在MySQL中不起作用,python,pyqt,mysql-python,Python,Pyqt,Mysql Python,我正在编写一个程序,其中两个变量从QCombobBoxes中选择,QCombobBoxes由MySQL查询的结果填充。然后,我将这些变量插入MySQLdb语句,该语句将变量插入到不同的MySQL表中。第一个变量工作正常,但第二个变量出现错误 TypeError: 'NoneType' object has no attribute '__getitem__' 这两个变量的代码相同,但名称不同 name = str(self.item_name.currentText()) cur.execut

我正在编写一个程序,其中两个变量从QCombobBoxes中选择,QCombobBoxes由MySQL查询的结果填充。然后,我将这些变量插入MySQLdb语句,该语句将变量插入到不同的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(“从名称=“%s”;”的项中选择项_id)”,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(“从name='Wire';”的项中选择项_id”)
仅当我使用字符串格式时才会发生错误

c.execute("SELECT * FROM sometable WHERE some_condition=?","My Condition")
你应该始终使用?这类事情的占位符

[编辑]

试试1<代码>当前执行(“从名称='%s';”的项目中选择项目\u id”。%(名称,)

或2<代码>当前执行(“从名称=%s;的项目中选择项目\u id”,(名称),)

从我的简短阅读中,我认为mysql驱动程序将自动引用%s参数
我的结论是,
cur.execute(“从name=%s;”,(name,)的项中选择项_id)
是最正确的方法(以避免注入等)。

我使用的是Python 2.7。这可能是错误的,但我学会了在这些情况下使用
%
。应该是
cur.execute(“从name='%s';,(name,)的项中选择项\u id”)
。。。mysql驱动程序可能会自动将%s括起来作为带引号的字符串。我尝试过这个方法,但遇到了mysql语法错误。占位符失败
1064,“您的SQL语法有错误;请查看与您的MySQL服务器版本相对应的手册,以了解在第1行“?”附近使用的正确语法”
我使用的代码与我在另一个变量中使用的代码几乎完全相同,并且工作正常。