Skip to content
Advertisement

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. Using the UPDATE command, I want to update the data in the table. I use MariaDB as database.

I’m getting this error:

Exception in Tkinter callback Traceback (most recent call last):   File "C:UsersZlatanAppDataLocalProgramsPythonPython39libtkinter__init__.py", line 1892, in __call__
    return self.func(*args)   File "C:UsersZlatanPycharmProjectspythonProjectpolymertssr.py", line 296, in update
    c.execute("""UPDATE tssr SET TypeError: Argument 2 must be Tuple or List!

Here is the complete 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?

Advertisement

Answer

As the error suggests, the 2nd argument of execute() should be a list or a tuple, while you’re using a dict. 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
          )
    )
User contributions licensed under: CC BY-SA
4 People found this is helpful
Advertisement