python - 用 Peewee 创建的表格似乎消失得无影无踪

标签 python postgresql orm flask peewee

我目前正在为 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/

相关文章:

python - xlrd 的 UnicodeEncodeError

python - 从 np.where 获得的元组的位置处的随机值到矩阵 (np.ndarray)

python - 如何偶尔刷新一次Python脚本?

php - 在 Postgresql 数据库中处理 NaN

python - 使用 Marshmallow 反序列化复杂的 JSON

postgresql - 在标准 Helm 图表中将初始化容器添加到 pod

c - libpq-fe,无法选择 INT8

java - Hibernate - 如何使用生成器为引用表创建主键?

node.js - 给定 sql server 查询的等效 Sequelize 操作

c# - Entity Framework (edmx)中列出的表的映射应该是什么