Python使用mysql-connector向MySQL插入数据成功后,无法在PyCharm及PopSQL中查询到数据
解决插入成功但查询不到数据的问题
首先,我们拆解下你的问题:插入操作因主键重复报错(这说明数据写入请求确实到达了数据库),但不管是代码还是PopSQL客户端都查不到数据,核心原因大概率集中在这几个点,咱们逐一排查:
1. 代码中查询结果未输出
你的read_query函数已经正确执行查询并返回结果,但你调用它的时候只是read_query(connection, query_two),没有把结果打印出来。修改代码,加上结果输出逻辑就能看到实际查询情况:
# 调用查询函数并打印结果 results = read_query(connection, query_two) if results: print("查询到的数据:") for row in results: print(row) else: print("未查询到数据")
2. 八进制数字的隐式转换导致主键混淆
你插入语句里的主键用了01,但在Python中,以0开头的整数会被解析为八进制数,01对应的十进制值其实是1。这会带来两种混淆:
- 如果你的表主键是
INT类型,数据库里实际存储的主键是1,而非你以为的01; - 再次插入时用
01,Python自动转成1,触发主键重复报错,但你可能误以为是01重复。
解决办法:
- 如果主键是数字类型,直接用十进制数字(比如写
1而非01); - 如果主键是字符串类型,把值用引号包裹,比如
INSERT INTO player_table VALUES("01", "Jarred Kelenic", "OF", "01");
3. 数据库连接/库选择不一致
你得确认这几点:
- PopSQL连接的是同一个MySQL实例(是本地的
localhost,不是远程服务器); - 在PopSQL里先执行
USE Pitcher_Batter_Results;切换到目标数据库,再执行查询; - 代码里的数据库名称拼写完全正确(MySQL在Linux下区分大小写,Windows下不区分,别因为大小写选错库)。
4. 事务提交隐性异常(概率较低)
虽然你的execute_query函数调用了connection.commit(),但如果连接在提交时出现隐性错误(比如临时网络波动、数据库权限限制),可能导致事务没持久化。可以在execute_query里加更详细的日志,或者在PopSQL里手动执行ROLLBACK;后重新插入测试。
快速排查测试步骤
按这个顺序来,能快速定位问题:
- 给代码加上查询结果打印逻辑,确认代码本身是否能查到数据;
- 在PopSQL里先执行
USE Pitcher_Batter_Results;,再执行SELECT * FROM player_table WHERE id=1;(注意用十进制的1); - 查看表结构,确认主键的类型和长度;
- 换一个新的主键(比如
2)重新插入,然后立即查询,看是否能查到数据。
内容的提问来源于stack exchange,提问作者Derek Wisher




