【问题记录】sqlite文件自动变为空

💡 问题描述:
在文件a.py中使用sqlite作为测试数据库,数据库中的结果正常入库,且在整个程序的运行过程中对于表中的行数能够正常的查询,运行时的文件大小是在稳步增长的,最后约占350MB,但是程序运行结束之后,sqlite文件会自动变为空的值,文件大小会变为仅有12K

猜测原因1:没有关闭连接(使用con.close())

❌是否有关闭均会自动变小

猜测原因2:文件过大导致的

❌ 将处理的文件大小改为较小的文件后仍然如此

猜测原因3:连接没有在同一个函数当中,而是在一个类中进行引用

❌ 将全过程改为在同一个函数当中进行之后仍然没有解决此问题

猜测原因4:多线程设置有误

❌不使用多线程之后也没有解决此问题

单步调试具体出错的代码位置

在连接关闭语句结束之后就会清空文件

删去关闭语句之后就会清空文件

也就是说函数执行结束之后就会清空文件

结论

最后查阅官方文档发现,sqlite还是带有事务功能的。因此,需要执行con.commit()操作才能正确插入。我自己能够搜到的教程里面,因为多数使用select语句作为例子,所以很少看到有提到这个的。

如果是直接使用像pandas.to_sql()这样的函数进行插入,应该就会隐藏commit地操作,在直接使用sql语句进行插入的时候产生错误。

我这次的操作中只是多线程写操作,所以多线程的影响不大,但是如果是边读边写,就需要再斟酌一下具体操作了。

(PS:pandas.to_sql()真的比SQL语句插入慢非常非常多,所以还是少用的好)

参考链接

SQLite Documentation

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值