peewee.OperationalError: no such table

简介: peewee.OperationalError: no such table

image.png

目录

问题描述

初始化数据表的时候,依次执行了

  • 建表
  • 查询数据

报错如下

peewee.OperationalError: no such table: tb_user

问题复现

测试环境

$ python --version
Python 3.7.0
$ pip show peewee
Name: peewee
Version: 3.15.3

定义Model

# -*- coding: utf-8 -*-
from peewee import TextField, AutoField, Model
from playhouse.sqliteq import SqliteQueueDatabase
db = SqliteQueueDatabase(database='database.db')
class UserModel(Model):
    id = AutoField()
    name = TextField()
    class Meta:
        database = db
        table_name = 'tb_user'

1、执行建表和插入

执行正常,没有报错

# 建表
db.create_tables([UserModel])
# 插入数据
UserModel.create(id=1, name='Tom')

2、执行建表和查询

  • 第一次执行的时候,都会报错,提示表不存在
  • 第二次之后执行,就不会报错
# 建表
db.create_tables([UserModel])
# 查询数据
row = UserModel.select('id').where(
    UserModel.id, '=', 1
).get_or_none()
print(row)
# peewee.OperationalError: no such table: tb_user

问题分析

文档:

原文:

SqliteQueueDatabase is designed to simplify things by sending all write queries through a single, long-lived connection. The benefit is that you get the appearance of multiple threads writing to the database without conflicts or timeouts. The downside, however, is that you cannot issue write transactions that encompass multiple queries – all writes run in autocommit mode, essentially.

SqliteQueueDatabase 是单线程写入和多线程读取,写的线程和读的线程并不在一起。

所以,写入还没完成就执行了读取操作,触发了表不存在的报错

问题解决

找到了问题所在,那我们等一等写入线程,再执行读操作

import time
time.sleep(0.01)

完整代码

# -*- coding: utf-8 -*-
import time
from peewee import TextField, AutoField, Model
from playhouse.sqliteq import SqliteQueueDatabase
db = SqliteQueueDatabase(database='database.db')
class UserModel(Model):
    id = AutoField()
    name = TextField()
    class Meta:
        database = db
        table_name = 'tb_user'
# 建表
db.create_tables([UserModel])
# 等一等,写入操作完成再读取
time.sleep(0.01)
# 查询数据
row = UserModel.select('id').where(
    UserModel.id, '=', 1
).get_or_none()
print(row)
# None

参考:Q: How to defer SqliteQueueDatabase? #2095


相关文章
|
存储 供应链 大数据
医院HIS基层卫生健康云综合管理系统源码
护士站: 特点:住院护士站管理系统是住院护理的中心所在,它可实现病房的床位统一管理、医嘱校对、医嘱的执行、医嘱终止、重整医嘱、医嘱查询、健康日志、患者病历首页查询,转科、出院申请,病人在住院期间的信息管理、病房分类管理、对病房、患者信息、患者费用等相关信息的查询。
187 1
|
存储 数据采集 监控
SkyWalking全景解析:从原理到实现的分布式追踪之旅
SkyWalking全景解析:从原理到实现的分布式追踪之旅
2066 1
|
8月前
|
机器学习/深度学习 传感器 自然语言处理
《工业互联网新玩法:用DeepSeek打造专属智能体》
在工业互联网快速发展的背景下,企业亟需数字化转型以提升竞争力。DeepSeek技术凭借强大的自然语言处理能力和高效的模型训练技术(如FP8混合精度训练和MoE架构优化),助力企业构建智能高效的工业智能体。通过数据收集、模型定制和智能体集成,DeepSeek赋能企业在生产管理、客户服务等方面实现智能化升级,显著提高效率与客户满意度。实际应用案例显示,钢铁企业和机械制造企业均通过DeepSeek实现了显著的业务优化。
497 1
|
12月前
|
机器学习/深度学习 存储 自然语言处理
深度学习之少样本学习
少样本学习(Few-Shot Learning, FSL)是深度学习中的一个重要研究领域,其目标是在只有少量标注样本的情况下,训练出能够很好地泛化到新类别或新任务的模型。
350 2
|
11月前
|
存储 数据采集 算法
数据中台最全详解,一文彻底搞懂!
中台是大型数据架构模式,也是大型架构的必备技能,本篇全面详解数据中台,建议收藏备用。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
数据中台最全详解,一文彻底搞懂!
|
算法 Ubuntu Linux
Linux Qt cannot find -lGL错误完美解决方案(亲测有效)
Linux Qt cannot find -lGL错误完美解决方案(亲测有效)
1346 1
|
11月前
|
SQL 存储 安全
网络安全与信息安全概述####
本文探讨了网络安全(Cybersecurity)和信息安全(Information Security)的基本概念及其差异,重点介绍了网络安全漏洞、加密技术及安全意识在信息保护中的重要性。本文旨在通过深入分析这些关键技术和策略,提升对信息安全整体性的理解,帮助读者在数字化时代更好地应对信息安全挑战。 ####
|
Python
PyQt学习------PyQt自定义信号
PyQt学习------PyQt自定义信号
200 0
|
机器学习/深度学习 数据采集 算法
Python基于OpenCV和卷积神经网络CNN进行车牌号码识别项目实战
Python基于OpenCV和卷积神经网络CNN进行车牌号码识别项目实战
|
数据采集 数据可视化 数据挖掘
Python量化炒股常用的Pandas包
Python量化炒股常用的Pandas包
242 7