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
相关产品推荐
相关产品推荐

