我是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”列名吗? 我基本上会想念一些东西吗?
答案 0 :(得分:2)
指定ForeignKeyField()
时,peewee希望根据自己的名称使用以_id
结尾的列。您的wold_states.session
字段会生成一个名为session_id
的列。
您可以通过为该字段设置db_column
来覆盖此内容:
class world_states(Model):
session = ForeignKeyField(sessions, db_column='session')