You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动