我每次都需要在 peewee 中调用创建表吗?

Do i need to call create tables every time in peewee?

我在一个项目中工作,其中我有具有相同数据库架构的不同项目, 所以我使用了 peewee 模型,其中:

dynamic_db = SqliteDatabase(None)
class BaseModel(Model):
    class Meta:
        database = dynamic_db
class KV (BaseModel):
    key = TextField()
    value = IntegerField()

每当我创建新项目时,我都会调用一个函数

dynamic_db.init(r'{}\database.db'.format(ProjectName.upper()))
dynamic_db.connect()
dynamic_db.create_tables([KV])
dynamic_db.close()

问题是一旦创建了这个数据库,我就不能用 peewee 访问了。 当我尝试创建记录时:
KV.create(key = 'Saul', value = 123)
我收到此错误:
peewee.InterfaceError: Error, database must be initialized before opening a connection.

对于 peewee 的任何帮助或食谱,我将不胜感激。

我认为您的问题描述或您收到的错误有误。您对 .init() 的调用是 初始化数据库的内容。之后就可以正常使用了。

工作正常的完整示例:

from peewee import *

db = SqliteDatabase(None)

class Base(Model):
    class Meta:
        database = db

class KV(Base):
    key = TextField()
    value = IntegerField()

db.init('foo.db')  # database is now initialized
db.connect()
db.create_tables([KV])  # no problems.
db.close()

我终于可以创造记录了。 我没有提到我试图在另一个文件中创建它们,但过程与答案中发布的那个 coleifer 相同。 我在其中创建 peewee 模型的文件是 databases.py,因此在另一个文件中我执行以下操作:

import databases

databases.db.init('foo.db')

databases.KV.create(name = 'Saul', value= 123)

谢谢!