我目前正在为 postgresql
使用 peewee
orm 编写一个 flask 应用程序。它在过去工作得很好,但似乎有些东西陷入了困惑,我不清楚如何继续调试这个问题。
首先我像这样启动数据库:
/usr/local/pgsql/bin/psql -D /usr/local/pgsql/data
我创建了一个新的数据库:
/usr/local/pgsql/bin/createdb indico
像这样配置连接:
db = peewee.PostgresqlDatabase(
'indico',
host="/tmp/",
user = 'indico', # There is also an indico user, this is not a db name confusion
password = 'password',
)
创建所需的表:
class PostgresqlModel(peewee.Model):
"""A base model that will use our Postgresql database"""
_id = peewee.PrimaryKeyField()
class Meta:
database = db
PostgresqlModel.create_table()
但是当我尝试实际访问创建的表时:
/usr/local/pgsql/bin/psql -d indico -U indico
>>> \dt
no relations found
似乎什么都没有出现。如果我尝试再次创建它们,我会收到一条错误消息,提示该关系已存在,而且虽然我能够保存对象,但我无法检索它们。
我觉得我在这里用我的路径和配置做了一些愚蠢的事情,但我似乎无法弄清楚,而且我还没有找到关于我应该在这里做的正确内省(introspection)的文档。不是在寻找神奇的修复方法,但如果有人能指出我正确的方向,我将不胜感激。
最佳答案
事实证明,这是 peewee
的自动提交行为的一个巧妙之处。如果 autocommit 设置为 False,那么创建的任何数据库都只能在事件数据库提交中访问。因此,如果您在导入模块时创建数据库。
将 db.commit()
添加到 create_table
序列的末尾似乎可以解决此问题。
if __name__ == "__main__":
User.create_table()
db.commit()
关于python - 用 Peewee 创建的表格似乎消失得无影无踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20940539/