2013-04-20 2 views
0

나는 peewee에 익숙하지 않으므로 어리석은 질문 인 경우 용서해주십시오. Google과 peewee 요리 책에서 검색했지만 지금까지 해결책이 없습니다.SQLite3 OperationalError : 테이블 XYZ에 ABC라는 열이 없습니다.

그래서, 난 내 DB 테이블의 4 개의 다음과 같은 모델을 가지고 :

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에 연결이 모델을 사용. 연결이 설정된 후 나는 내 주요 파이썬 코드에서 다음을 수행하십시오

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

그러나이 나에게 다음과 같은 오류 제공 : 기본적으로 올바른

sqlite3.OperationalError: table world_states has no column named session_id 

을, 테이블 world_state 실제로 수행 그러한 컬럼을 포함하지 않는다.
그러나 내 코드에서 "session_id"에 대한 참조를 전혀 찾을 수 없습니다.

Whey는 "session_id"열 이름을 사용하고 싶습니까?
여기에 본질적으로 뭔가 빠졌습니까?

답변

2

ForeignKeyField()을 지정하면 피어 (feeweeee)는 자신의 이름을 기준으로 _id으로 끝나는 열을 사용할 것으로 예상합니다. wold_states.session 필드의 결과는 session_id이라는 열이됩니다.

당신은 그 필드에 대한 db_column을 설정하여 재정의 할 수

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

이 올바른지, 감사 마티! 내가 추가 할 수있는 유일한 것은 테이블을 만든 다음 필드를 추가하면 peewee가 데이터베이스 테이블에 열을 "자동으로"추가하지 않는다는 것입니다. 이 작업은 수동으로 수행해야합니다. – coleifer

+0

@coleifer : 문구를 조정했습니다. –

+0

오 마이 갓! 이 점에 대해 @MartijnPieters에게 감사드립니다. 4 일 동안 고난을 겪은 후에 나는 결국 내 문제를 알아 냈습니다. 나는 똑같은 일을 겪었고 나는 문서를 체크했다. 그러나 그들이 혼란스럽지 않게 작성한 방식으로 나는 db_column이 실제로 어떤 컬럼을 가리키는지를 알지 못했다. – OzzyTheGiant

관련 문제