Python PyQt组合框结果在MySQL中不起作用
我正在编写一个程序,其中两个变量从QCombobBoxes中选择,QCombobBoxes由MySQL查询的结果填充。然后,我将这些变量插入MySQLdb语句,该语句将变量插入到不同的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
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行“?”附近使用的正确语法”
我使用的代码与我在另一个变量中使用的代码几乎完全相同,并且工作正常。