用Peewee创造的桌子似乎消失在空气中

时间:2014-01-05 23:23:43

标签: python postgresql orm flask peewee

我正在使用peewee orm为postgresql编写一个烧瓶应用。它在过去运行良好,但似乎已经陷入混乱状态,我不清楚如何继续调试问题。

首先我像这样启动数据库:

/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

似乎没有任何表现。如果我再次尝试创建它们,我会收到一个错误,说该关系已经存在,虽然我能够保存对象,但我无法检索它们。

我觉得我在路径和配置上做了些傻事,但我似乎无法弄明白,而且我无法找到关于我应该在这里做的正确内省的文档。不是寻找魔法修复,但如果有人能指出我正确的方向,那将非常感激。

1 个答案:

答案 0 :(得分:-1)

事实证明,这是peewee自动提交行为的过剩行为。如果autocommit设置为False,则只能在活动数据库提交中访问创建的任何数据库。因此,如果在导入模块时创建数据库。

db.commit()添加到create_table序列的末尾似乎可以解决此问题。

if __name__ == "__main__":
    User.create_table()
    db.commit()