【问题标题】:Do i need to call create tables every time in peewee?我是否需要每次在 peewee 中调用创建表?
【发布时间】:2020-10-05 12:03:09
【问题描述】:

我在一个项目中工作,其中我有不同的项目具有相同的数据库架构, 所以我使用了 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 的任何帮助或食谱,我将不胜感激。

【问题讨论】:

    标签: python sqlite peewee


    【解决方案1】:

    我认为您的问题描述或您收到的错误中有一些不正确的地方。您对.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()
    

    【讨论】:

    • 谢谢,但实际上当我第一次创建它时,我没有任何问题。问题是当我运行其他函数来创建记录时。例如,如果我运行: KV.create(key = 'Saul', value= 123) 然后我收到一条消息说我应该初始化数据库
    【解决方案2】:

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

    import databases
    
    databases.db.init('foo.db')
    
    databases.KV.create(name = 'Saul', value= 123)
    
    

    谢谢!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-10
      • 1970-01-01
      • 1970-01-01
      • 2017-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多