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
这样在执行操纵数据库的语句时就不再检查线程是否相同的问题了。