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

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;后重新插入测试。

快速排查测试步骤

按这个顺序来,能快速定位问题:

  1. 给代码加上查询结果打印逻辑,确认代码本身是否能查到数据;
  2. 在PopSQL里先执行USE Pitcher_Batter_Results;,再执行SELECT * FROM player_table WHERE id=1;(注意用十进制的1);
  3. 查看表结构,确认主键的类型和长度;
  4. 换一个新的主键(比如2)重新插入,然后立即查询,看是否能查到数据。

内容的提问来源于stack exchange,提问作者Derek Wisher

火山引擎 最新活动