python sqlite3 ProgrammingError(线程的锅)

python在执行数据库查询语句出现如下异常:
ProgrammingError: SQLite objects created in a thread can only be used in that same thread.The object was created in thread id xxx and this is thread id xxx.

第一次遇到这种问题,之前控制台连报错信息都不输出,然后利用了try-except结构把异常信息输出显示了才知道是这个问题。
各种搜索资料,翻看博客才知道还有这种错因:
因为在python操作某个数据库的数据的线程必须和创建数据库的线程是同一个线程,不然就会出现异常。简而言之,应该就是create语句和select语句应该都在同一个线程下执行才可以。

所以,要想解决这个问题有如下两种方法:
1.(这个方法有点麻烦,不建议,不过可以根据个人项目实际情况来决定)
把创建数据库对象的代码剪切到当前线程里来,同时把之前的已经创建成功的数据库删掉重新执行创建语句
2. (推荐使用)
把当前线程里的connect语句改为这种形式:conn=sqlite3.connect(“stocks.db”,check_same_thread = False)
即加上:check_same_thread = False
这样在执行操纵数据库的语句时就不再检查线程是否相同的问题了。

这篇博客里有比较详细的问题分析可以参看:问题分析
简单粗暴解决问题博客:无分析直接解决问题

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值