💡 问题描述:
在文件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语句插入慢非常非常多,所以还是少用的好)