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


相关文章
|
存储 数据管理 关系型数据库
分布式系统设计之套路Master-Slave架构
分布式系统设计之套路Master-Slave架构
1695 0
|
4月前
|
人工智能 自然语言处理 JavaScript
17种RAG实现方法大揭秘
RAG(检索增强生成)通过结合外部知识库与LLM生成能力,有效解决大模型知识滞后与幻觉问题。本文详解三类策略、17种实现方案,涵盖文档分块、检索排序与反馈机制,并提供工程选型指南,助力构建高效智能系统。
1065 0
|
机器学习/深度学习 存储 自然语言处理
深度学习之少样本学习
少样本学习(Few-Shot Learning, FSL)是深度学习中的一个重要研究领域,其目标是在只有少量标注样本的情况下,训练出能够很好地泛化到新类别或新任务的模型。
502 2
|
算法 Ubuntu Linux
Linux Qt cannot find -lGL错误完美解决方案(亲测有效)
Linux Qt cannot find -lGL错误完美解决方案(亲测有效)
1509 1
|
10月前
|
机器学习/深度学习 传感器 自然语言处理
《工业互联网新玩法:用DeepSeek打造专属智能体》
在工业互联网快速发展的背景下,企业亟需数字化转型以提升竞争力。DeepSeek技术凭借强大的自然语言处理能力和高效的模型训练技术(如FP8混合精度训练和MoE架构优化),助力企业构建智能高效的工业智能体。通过数据收集、模型定制和智能体集成,DeepSeek赋能企业在生产管理、客户服务等方面实现智能化升级,显著提高效率与客户满意度。实际应用案例显示,钢铁企业和机械制造企业均通过DeepSeek实现了显著的业务优化。
582 1
|
机器学习/深度学习 数据采集 算法
Python基于OpenCV和卷积神经网络CNN进行车牌号码识别项目实战
Python基于OpenCV和卷积神经网络CNN进行车牌号码识别项目实战
|
SQL 存储 安全
网络安全与信息安全概述####
本文探讨了网络安全(Cybersecurity)和信息安全(Information Security)的基本概念及其差异,重点介绍了网络安全漏洞、加密技术及安全意识在信息保护中的重要性。本文旨在通过深入分析这些关键技术和策略,提升对信息安全整体性的理解,帮助读者在数字化时代更好地应对信息安全挑战。 ####
|
传感器 网络协议
CCF推荐B类会议和期刊总结:(计算机网络领域)
中国计算机学会(CCF)推荐的B类会议和期刊在计算机网络领域具有较高水平。本文总结了所有B类会议和期刊的详细信息,包括全称、出版社、dblp文献网址及研究领域,涵盖传感器网络、移动网络、网络协议等多个方向,为学者提供重要学术交流平台。
CCF推荐B类会议和期刊总结:(计算机网络领域)
|
监控 网络协议 Ubuntu
这20款Linux带宽监控工具,是网工,都想全部要!
这20款Linux带宽监控工具,是网工,都想全部要!
774 1