FastSQLite无.cursor()方法时如何正确打印查询结果?
FastSQLite无.cursor()方法时如何正确打印查询结果?
我完全懂你现在的困惑——明明数据已经成功插入数据库了,用fetch_all获取后转成DataFrame却显示空表,这确实挺让人摸不着头脑的。咱们来一步步解决这个问题:
问题根源
你代码里的db.fetch_all('gato')调用方式不对!FastSQLite的fetch_all方法需要传入完整的SQL查询语句,而不是直接传表名。直接传表名的话,它没法正确执行查询,自然返回空结果。
修正后的代码
把获取数据的部分改成执行完整的SELECT语句,就能正常拿到数据了,我给你调整了完整代码:
from fastsqlite import FastSQLite import pandas as pd db = FastSQLite() db.connect('file.db') # 先判断表是否存在,避免重复创建报错 if not db.table_exists('gato'): db.create_table('gato', 'id int, rum varchar(300)') # 插入数据(也可以用参数化插入更安全,不过先按你的方式来) db.insert('gato', 'id, rum', '1,123') db.insert('gato', 'id, rum', '2,223') db.insert('gato', 'id, rum', '3,323') db.insert('gato', 'id, rum', '4,423') # 关键:传入完整的SELECT查询语句 table = db.fetch_all('SELECT * FROM gato') print() print("===========================") # 指定列名让DataFrame显示更清晰 print(pd.DataFrame(table, columns=['id', 'rum'])) print("===========================") print()
额外说明
- 除了
fetch_all,你也可以用db.query()方法,它的用法和fetch_all一致,都是执行SQL语句并返回结果。 - 加上
table_exists的判断是个小细节,避免重复运行代码时因为表已存在而抛出错误。 - 如果后续要插入大量数据,建议用参数化插入的方式,既安全又高效,比如
db.insert('gato', ['id', 'rum'], [(5, '523'), (6, '623')])这种批量插入的写法。
备注:内容来源于stack exchange,提问作者user1942505
相关产品推荐
相关产品推荐

