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

Python向sqlite3数据库插入JSON数据后返回空列表如何解决

问题核心原因

你调用cur.fetchall()返回空列表的最直接原因是:fetchall() 仅能获取最近一次执行的SELECT查询语句返回的结果集,你此前执行的都是INSERT插入操作,没有执行任何查询语句,自然拿不到任何数据,并不代表数据没有插入成功。

验证数据是否插入成功的方法

在conn.commit()之后、打印结果之前,先执行查询语句即可:

conn.commit()
# 新增查询语句
cur.execute('SELECT * FROM tweets')
print(cur.fetchall())
conn.close()

其他潜在问题排查

如果执行查询后还是没有数据,可检查以下常见问题:

  • 主键冲突:你将id设为了表的主键,如果JSON数据中存在重复的推文id,默认会导致插入失败、循环中断。可以将插入语句调整为INSERT OR IGNORE跳过重复id的插入,避免程序中断:
    cur.execute('INSERT OR IGNORE INTO tweets (id, created_at, full_text, favourite_count, retweet_count) VALUES (?, ?, ?, ?, ?)', 
                (records['id'], records['created_at'], records['full_text'], records['user']['favourites_count'], records['retweet_count']))
    
  • 字段匹配错误:你当前插入的favourite_count取的是records['user']['favourites_count'],也就是发推用户的总点赞数,如果你要存储的是单条推文本身的获赞数,通常对应JSON的字段是records['favorite_count'],可根据你的实际JSON结构核对调整。
  • 异常捕获:可以在循环中加异常打印,定位是否有插入报错:
    for records in data:
        try:
            cur.execute('INSERT INTO tweets (id, created_at, full_text, favourite_count, retweet_count) VALUES (?, ?, ?, ?, ?)', 
                        (records['id'], records['created_at'], records['full_text'], records['user']['favourites_count'], records['retweet_count']))
        except Exception as e:
            print(f"插入id为{records['id']}的推文时出错:{e}")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:48:02