SQLite3 OperationalError:表XYZ没有名为ABC的列

时间:2013-04-20 17:11:59

标签: python sqlite peewee

我是peewee的新手,所以如果这是一个愚蠢的问题,请原谅我。我在Google和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”的引用。

小便想要使用那个“session_id”列名吗? 我基本上会想念一些东西吗?

1 个答案:

答案 0 :(得分:2)

指定ForeignKeyField()时,peewee希望根据自己的名称使用以_id结尾的列。您的wold_states.session字段会生成一个名为session_id的列。

您可以通过为该字段设置db_column来覆盖此内容:

class world_states(Model):
    session = ForeignKeyField(sessions, db_column='session')