You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何数据库仅在创建新表后才会更新显示数据?

问题描述

在Jupyter Notebook中通过Python执行SQL插入操作后,pd.read_sql能正常查询到插入的数据,但HeidiSQL中无法实时看到:数据库标签显示对应行数,但查看表数据时显示0行,只有创建新表后,旧表的数据才会在HeidiSQL中显示。

插入数据的代码:

cur.execute("CREATE TABLE table_1 (col_1 INT, col_2 INT, col_3 DOUBLE, col_4 DOUBLE, col_5 DOUBLE, col_6 BIGINT)")
query = 'INSERT INTO table_1 (col_1, col_2, col_3, col_4, col_5, col_6) VALUES(%s, %s, %s, %s, %s, %s)'                                                        
my_data = []

for row in data_df:
    my_data.append(tuple(row))
cur.executemany(query, my_data)

查询数据的代码:

pd.read_sql( '''SELECT * FROM table_1''',conn)
解决方案

这是因为Python的数据库连接默认未开启自动提交,插入操作属于未提交的事务,只有当前连接(Jupyter中的conn)能看到未提交的数据,其他客户端(如HeidiSQL)无法读取到未提交的事务内容。而创建新表的操作会触发隐式事务提交,所以之前的插入数据才会被持久化并可见。

解决方法有两种:

  • 方法1:手动提交事务
    在cur.executemany执行完成后,调用连接对象的commit()方法:

    cur.executemany(query, my_data)
    conn.commit()  # 新增这行提交事务
    
  • 方法2:开启自动提交
    在建立数据库连接时,设置自动提交模式(以MySQL为例):

    # 建立连接时开启自动提交
    conn = mysql.connector.connect(
        host="your_host",
        user="your_user",
        password="your_password",
        database="your_db",
        autocommit=True  # 开启自动提交
    )
    

验证:提交事务后,直接在HeidiSQL中刷新表数据,就能看到插入的内容了。

内容的提问来源于stack exchange,提问作者Maite Martinez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 08:35:18