我每次都需要在 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)
谢谢!
我在一个项目中工作,其中我有具有相同数据库架构的不同项目, 所以我使用了 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)
谢谢!