[英]TypeError: Argument 2 must be Tuple or List
I have built a GUI using TKinter. There I want to output the stored data and change them individually.我已经使用 TKinter 构建了一个 GUI。我想要 output 存储的数据并单独更改它们。 Using the UPDATE command, I want to update the data in the table.使用 UPDATE 命令,我想更新表中的数据。 I use MariaDB as database.我使用 MariaDB 作为数据库。
I'm getting this error:我收到此错误:
Exception in Tkinter callback Traceback (most recent call last): File "C:\Users\Zlatan\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 1892, in __call__ return self.func(*args) File "C:\Users\Zlatan\PycharmProjects\pythonProject\polymer\tssr.py", line 296, in update c.execute("""UPDATE tssr SET TypeError: Argument 2 must be Tuple or List!
Here is the complete function:这是完整的 function:
# create update function
def update():
# connect to database
conn = mariadb.connect(
user="root",
password="pass",
host="127.0.0.1",
port=3306,
database="polymer"
)
# create cursor
c = conn.cursor()
record_id = select_box.get()
c.execute("""UPDATE tssr SET
Order_name = :order_name,
Operator_name = :operator_name,
Sample = :sample,
Strain = :strain
WHERE ID = :ID""",
{
'order_name': Order_name_editor.get(),
'operator_name': Operator_name_editor.get(),
'sample': Sample_editor.get(),
'strain': Strain_editor.get(),
'ID': record_id
})
# commit changes
conn.commit()
# close connection
conn.close()
Any suggestions where I'm doing wrong?有什么我做错的建议吗?
As the error suggests, the 2nd argument of execute()
should be a list
or a tuple
, while you're using a dict
.正如错误所暗示的那样,当您使用dict
时, execute()
的第二个参数应该是一个list
或一个tuple
。 Try this:尝试这个:
c.execute("""UPDATE tssr SET
Order_name = %s,
Operator_name = %s,
Sample = %s,
Strain = %s
WHERE ID = %s""",
(
Order_name_editor.get(),
Operator_name_editor.get(),
Sample_editor.get(),
Strain_editor.get(),
record_id
)
)
MariaDB Connector/Python doesn't support named style parameters as listed in PEP-249. MariaDB 连接器/Python 不支持 PEP-249 中列出的命名样式参数。 The default paramstyle is qmark :默认参数样式是qmark :
>>> mariadb.paramstyle
'qmark'
However it is possible also to use format or pyformat paramstyles (with the limitation that they can't be mixed):然而,也可以使用format或pyformat paramstyles(但不能混合使用):
cursor.execute("select ?,?", ("This is paramstyle", "qmark"));
cursor.execute("select %s,%s", ("This is paramstyle", "format"));
cursor.execute("select %(val1)s,%(val2)s", { "val1" : "This is paramstyle", "val2" : "pyformat"});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.