2013-04-20 90 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

相關問題