0

我是peewee的新手,所以如果这是一个愚蠢的问题,请原谅我。我在谷歌和 peewee 食谱上搜索过,但到目前为止没有找到解决方案。

所以,我的四个数据库表有以下模型:

class games_def(Model):
    id = PrimaryKeyField()
    name = TextField()
    class Meta:
        database = dbmgr.DB

class users_def(Model):
    id = PrimaryKeyField()
    first_name = TextField()
    last_name = TextField()
    class Meta:
        database = dbmgr.DB

class sessions(Model):
    id = PrimaryKeyField()
    game = ForeignKeyField(games_def, related_name = 'sessions')
    user = ForeignKeyField(users_def, related_name = 'sessions')
    comment = TextField()
    class Meta:
        database = dbmgr.DB

class world_states(Model):
    session = ForeignKeyField(sessions)
    time_step = IntegerField()
    world_state = TextField()
    class Meta:
        database = dbmgr.DB

使用这些模型,我通过 peewee 连接到 SQLite3 数据库,效果很好。建立连接后,我在我的主要 Python 代码中执行以下操作:

models.world_states.create(session = 1, time_step = 1)

但是,这给了我以下错误:

sqlite3.OperationalError: table world_states has no column named session_id

这基本上是正确的,表 world_state 确实不包含这样的列。
但是,我在我的代码中根本找不到对“session_id”的任何引用。

peewee 想使用那个“session_id”列名?
我在这里错过了什么吗?

4

1 回答 1

3

当您指定ForeignKeyField()peewee 时,希望使用_id基于他们自己的名称结尾的列。因此,您的wold_states.session字段会产生一个名为 的列session_id

您可以通过设置db_column该字段来覆盖它:

class world_states(Model):
    session = ForeignKeyField(sessions, db_column='session')
于 2013-04-20T17:28:37.563 回答