Python执行SQL命令无报错但数据库无变更问题求助
Python执行INSERT...SELECT无报错但数据库无数据的解决方法
- 提交事务
mysql.connector默认关闭自动提交机制,执行完SQL语句后必须手动提交事务,数据才会写入数据库。修改代码,在execute后添加提交操作:
import mysql.connector mydb = mysql.connector.connect(host='localhost', database='glabo', user='root', password='.........') mycursor = mydb.cursor() mycursor.execute("INSERT INTO orders (o_userid, o_labo, o_jour, o_heure) SELECT users.user_id, labos.l_id, jours.j_id, heures.h_id FROM users, labos, jours, heures WHERE users.user_name = 'Kbayad' AND labos.l_nom = 'LABO 1' AND jours.j_jour = 'Mardi' AND heures.h_heure = '10-12';") # 新增事务提交 mydb.commit()
- 验证SELECT语句是否返回数据
如果提交后仍无数据,说明你的SELECT查询未匹配到任何记录。可以直接在数据库客户端(如MySQL Workbench)单独运行这条SELECT语句,确认是否有结果返回;也可以在代码中先执行查询并查看结果:
mycursor.execute("SELECT users.user_id, labos.l_id, jours.j_id, heures.h_id FROM users, labos, jours, heures WHERE users.user_name = 'Kbayad' AND labos.l_nom = 'LABO 1' AND jours.j_jour = 'Mardi' AND heures.h_heure = '10-12';") results = mycursor.fetchall() print(results) # 输出为空则说明WHERE条件不匹配
重点检查WHERE子句中的条件是否准确:比如字符串的大小写、空格、特殊字符是否和数据库中的数据完全一致(例如'Mardi'拼写是否正确,'LABO 1'的空格是否存在)。
- 其他排查方向
- 确认
root用户拥有orders表的INSERT权限(虽然权限不足通常会抛出错误,但仍可排查)。 - 检查
orders表的字段类型与SELECT返回的字段类型是否兼容,比如o_userid和user_id的类型是否一致,类型不兼容可能导致静默失败。
- 确认
内容的提问来源于stack exchange,提问作者Med Op
相关产品推荐
相关产品推荐

