Python编写数据库信息修改函数执行时报1064 SQL语法错误如何解决
报错原因
pymysql的cursor.execute()方法仅接受两个核心位置参数:第一个是SQL语句,第二个是包含所有占位符对应值的元组或列表。你当前直接把8个参数分散传递给execute方法,导致只有第一个参数被识别为SQL参数,剩余参数未被代入SQL语句,最终生成的SQL语句存在未替换的%s占位符,MySQL解析时触发语法错误。
修复方法
将所有需要传入SQL的参数用括号包裹组装为元组,再传给execute方法即可,修正后的代码如下:
def update(self): con = pymysql.connect( host = 'localhost', user = 'root', password = '', database = 'employ') cur = con.cursor() cur.execute("update employees set family_members=%s, social_status=%s, gender=%s, date_birth=%s, id_number=%s, mail=%s, name=%s where id=%s", ( self.family_members_var.get(), self.social_status_var.get(), self.gender_var.get(), self.date_birth_var.get(), self.id_number_var.get(), self.mail_var.get(), self.name_var.get(), self.id_var.get() ) ) con.commit() self.fetch_all() self.clear() con.close()
补充说明
- 当SQL仅存在1个占位符时,传参需要写成
(参数值,)的格式,末尾必须加逗号,否则括号会被识别为普通运算符号,不会被当成元组,同样会触发同类语法错误。 - 建议新增异常捕获逻辑,SQL执行报错时主动回滚事务,避免出现数据不一致的问题。
内容的提问来源于stack exchange,提问作者Hussein Ouda
相关产品推荐
相关产品推荐

