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

SQLite多批次插入数据时如何正确统计全部新增记录总数

问题原因

cursor.rowcount只会保留最近一次SQL执行的影响行数,你先后执行了两次插入操作,第二次执行完之后rowcount就被覆盖成了第二次插入的20条,所以最后只取一次的话只能拿到20条。另外你原来的累加逻辑只加了1,完全没有用到rowcount的实际数值,也会导致统计错误。

修正方案

每次执行完一个批次的插入操作后,立刻读取当前cursor.rowcount的值累加到总计数器中即可,示例代码如下:

import sqlite3

# 初始化总新增记录计数器
records_added_Nations = 0

# NATION 1插入逻辑
sqlite_insert_query_Nation1 = 'INSERT INTO Nation (Name_Nation) VALUES (?);'
cursor.executemany(sqlite_insert_query_Nation1, Values_Nation1)
con.commit()
# 累加当前批次新增行数
records_added_Nations += cursor.rowcount

# NATION 2插入逻辑
sqlite_insert_query_Nation2 = 'INSERT INTO Nation (Name_Nation) VALUES (?);'
cursor.executemany(sqlite_insert_query_Nation2, Values_Nation2)
con.commit()
# 再次累加当前批次新增行数
records_added_Nations += cursor.rowcount

# 打印总新增记录数
print ("Record inserted successfully", records_added_Nations)
cursor.close()

可选优化

如果两个批次的插入是强关联业务,建议合并为同一个事务,避免出现一半成功一半失败导致计数和实际数据不符的问题:

records_added_Nations = 0
try:
    insert_sql = 'INSERT INTO Nation (Name_Nation) VALUES (?);'
    # 插入国家1批次
    cursor.executemany(insert_sql, Values_Nation1)
    records_added_Nations += cursor.rowcount
    # 插入国家2批次
    cursor.executemany(insert_sql, Values_Nation2)
    records_added_Nations += cursor.rowcount
    # 两次插入都成功再提交事务
    con.commit()
    print("Record inserted successfully", records_added_Nations)
except Exception as e:
    # 任意环节失败就回滚所有操作
    con.rollback()
    print("插入失败已回滚,错误信息:", str(e))
finally:
    cursor.close()

内容的提问来源于stack exchange,提问作者Erling Olsen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:06:04