Python操作MySQL报错AttributeError: 'tuple' object has no attribute 'encode'求助
解决Python操作MySQL时的AttributeError: 'tuple' object has no attribute 'encode'错误
你的错误根源是变量定义末尾多了逗号,导致sql_command和values都变成了元组,而不是预期的SQL字符串和参数元组。MySQL的cursor.execute方法第一个参数需要接收字符串类型的SQL语句,你传了元组,就会触发这个编码相关的错误。
修正后的代码如下:
def add_customer(): # 去掉末尾的逗号,让sql_command是字符串类型 sql_command = """INSERT INTO customer (first_name, last_name, zipcode, price_paid, email, address_1, address_2, city, state_1, country, phone, payment_method, discount_code) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)""" # 同样去掉末尾的逗号,让values是正常的参数元组 values = (first_name_box.get(), last_name_box.get(), zipcode_box.get(), price_paid_box.get(), email_box.get(), address_1_box.get(),address_2_box.get(),city_box.get(),state_1_box.get(), country_box.get(),phone_box.get(),payment_method_box.get(), discount_code_box.get()) my_cursor.execute(sql_command, values) mydb.commit() creat_field()
补充说明:
- 在Python里,单独一个值后面加逗号会被解析成元组,比如
a = "test",其实a是("test",),而不是字符串"test" - 你原来的代码中,
sql_command和values都因为末尾的逗号变成了单元素元组,execute方法处理时把元组当成SQL语句去编码,自然就报错了。
内容的提问来源于stack exchange,提问作者Tamara Golshan
相关产品推荐
相关产品推荐

