繁体   English   中英

无法创建Python Peewee SqliteQueueDatabase表

[英]Python Peewee SqliteQueueDatabase table does not get created

我正在使用SQLite数据库开发多线程应用程序。 我已经进行了一些研究,似乎SqliteQueueDatabase可以提供所需的并发处理。 我已经仔细阅读了文档,但似乎还没有完全了解如何启动和启动数据库。

from peewee import *
from playhouse.sqliteq import SqliteQueueDatabase

db = SqliteQueueDatabase(':memory:')


class Prime(Model):
    num = IntegerField()

    class Meta:
        database = db


db.start()
db.connect()
db.create_tables([Prime])
print db.get_tables()  # prints []
db.stop()

在上面的示例中启动数据库后,我尝试为模型创建表,但未创建该表。 我想念什么? 我试图找到一个涵盖整个生命周期但无法实现的peewee&SqliteQueueDatabase示例。

您正在使用内存数据库。 内存数据库使用每个线程的连接。 因此,除非您专门使用共享内存模式(必须查阅sqlite文档),否则您会很不走运。

使用基于文件的数据库,您的示例将运行良好。

我遇到了这个问题,似乎读查询在create_tables()之前完成。

我的解决方法是引发背对背db.stop() db.start()调用。 强制执行代码以等待所有数据库写查询完成。

from peewee import *
from playhouse.sqliteq import SqliteQueueDatabase

db = SqliteQueueDatabase('db.sqlite3')


class Prime(Model):
    num = IntegerField()

class Meta:
    database = db


db.start()
db.connect()
db.create_tables([Prime])
db.stop() #  Wait for create_tables() to complete
db.start() #  Continue execution
print db.get_tables()
db.stop()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM