2013-04-20 60 views
0

我是新来的peewee,所以请原谅我,如果这是一个愚蠢的问题。我在谷歌和peewee食谱上进行了搜索,但到目前为止还没有找到解决办法。SQLite3 OperationalError:表XYZ没有列名为ABC

所以,我有以下型号到我的数据库表四:

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的DB。连接已经建立 后,我做我的主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”的引用。

Whee peewee想使用该“session_id”colum名称吗?
我在这里错过了什么吗?

回答

2

当您指定一个ForeignKeyField() peewee预计将使用一个以_id结尾的列,这个列基于他们自己的名字。因此,您的wold_states.session字段会生成一个名为session_id的列。

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

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

这是正确的,感谢马亭!我唯一会添加的是,如果你创建了你的表,然后添加了一个字段,peewee不会“自动”在你的数据库表中添加列。这必须手动完成。 – coleifer 2013-04-20 17:34:59

+0

@coleifer:调整了措辞。 – 2013-04-20 20:41:22

+0

天啊!非常感谢你为此采访了@MartijnPieters。经过四个痛苦的日子,我终于想出了我的问题。我有同样的事情发生,我检查了文档,但他们写出来的方式困惑了我,我不知道db_column实际上是指定指向哪一列。 – OzzyTheGiant 2016-10-05 21:01:56

相关问题