MySQL 1064(42000)语法错误求助:INSERT语句占位符问题排查
排查MySQL错误1064 (42000)的语法问题
嘿,我帮你找到问题所在啦!你遇到的MySQL 1064语法错误,其实不是INSERT语句本身的语法问题,而是参数传递的格式出错导致的,具体原因和修复方法如下:
错误根源
你代码里的val = (str(var_films2.get()))看起来是个元组,但Python里单个元素的元组必须在元素末尾加逗号,否则括号只是用来做表达式分组,最终val其实是一个普通字符串,而不是元组。
当cursor.execute(sql, val)执行时,驱动会把这个字符串直接代入SQL语句,导致SQL解析器把它当成语法的一部分,从而抛出%s)附近的语法错误。
修复方案
把val改成带逗号的元组,或者用列表来传递参数,两种方式都可以:
方式1:单个元素的元组(推荐)
val = (str(var_films2.get()),) # 注意元素末尾的逗号
方式2:使用列表
val = [str(var_films2.get())]
额外优化建议
你的打印语句print("{} data ditambahkan")可以优化一下,显示实际插入的行数,这样更直观:
print("{} data ditambahkan".format(cursor.rowcount))
修正后的完整代码
import mysql.connector db = mysql.connector.connect(host="localhost",user="root",passwd="",database="db_bioskop") if db.is_connected(): print("Berhasil terhubung ke database") else: print("eror") cursor = db.cursor() sql = "INSERT INTO daftar_film (`judul_film`) VALUES (%s)" # 修正参数格式为元组 val = (str(var_films2.get()),) cursor.execute(sql, val) db.commit() # 显示实际插入行数 print("{} data ditambahkan".format(cursor.rowcount))
内容的提问来源于stack exchange,提问作者Adhy




