简体   繁体   English

类型错误:参数 2 必须是元组或列表

[英]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):然而,也可以使用formatpyformat 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM