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


相关文章
|
关系型数据库 MySQL 网络安全
|
存储 数据管理 关系型数据库
分布式系统设计之套路Master-Slave架构
分布式系统设计之套路Master-Slave架构
2037 0
|
11月前
|
人工智能 自然语言处理 JavaScript
17种RAG实现方法大揭秘
RAG(检索增强生成)通过结合外部知识库与LLM生成能力,有效解决大模型知识滞后与幻觉问题。本文详解三类策略、17种实现方案,涵盖文档分块、检索排序与反馈机制,并提供工程选型指南,助力构建高效智能系统。
2143 0
|
设计模式 开发者 Python
Python中循环依赖问题及其解决方案
循环依赖是 Python 开发中需要特别注意的问题。通过重新设计模块结构、延迟导入、依赖注入、利用 Python 的动态特性以及代码重构等方法,可以有效地解决循环依赖问题。这些策略不仅有助于提高代码的可维护性和可读性,还能避免潜在的运行时错误。在实际开发中,开发者应该根据具体情况选择合适的解决方案。
|
SQL 存储 安全
网络安全与信息安全概述####
本文探讨了网络安全(Cybersecurity)和信息安全(Information Security)的基本概念及其差异,重点介绍了网络安全漏洞、加密技术及安全意识在信息保护中的重要性。本文旨在通过深入分析这些关键技术和策略,提升对信息安全整体性的理解,帮助读者在数字化时代更好地应对信息安全挑战。 ####
|
传感器 网络协议
CCF推荐B类会议和期刊总结:(计算机网络领域)
中国计算机学会(CCF)推荐的B类会议和期刊在计算机网络领域具有较高水平。本文总结了所有B类会议和期刊的详细信息,包括全称、出版社、dblp文献网址及研究领域,涵盖传感器网络、移动网络、网络协议等多个方向,为学者提供重要学术交流平台。
CCF推荐B类会议和期刊总结:(计算机网络领域)
|
存储 机器学习/深度学习 人工智能
深入浅出 AI 智能体(AI Agent)|技术干货
随着人工智能技术的发展,智能体(AI Agents)逐渐成为人与大模型交互的主要方式。智能体能执行任务、解决问题,并提供个性化服务。其关键组成部分包括规划、记忆和工具使用,使交互更加高效、自然。智能体的应用涵盖专业领域问答、资讯整理、角色扮演等场景,极大地提升了用户体验与工作效率。借助智能体开发平台,用户可以轻松打造定制化AI应用,推动AI技术在各领域的广泛应用与深度融合。
34869 1
|
机器学习/深度学习 分布式计算 大数据
什么是 Databricks?它的主要功能是什么?
【8月更文挑战第12天】
11215 7