2014-12-26 4 views
1

Я пытаюсь создать простую модель для моей существующей базы данных с peewee.ошибка peewee foreign key

База данных, над которой я работаю, описана в this paper.

Я создал модель с pwiz, которая отлично работает, однако для меня не создаются внешние ключи, которые позволяют присоединяться. Поэтому я редактировал модель так это выглядит следующим образом:

from peewee import * 

database = MySQLDatabase('enron', **{'password': '...', 'user': 'root'}) 


class UnknownField(object): 
    pass 


class BaseModel(Model): 
    class Meta: 
     database = database 


class Employee(BaseModel): 
    email = CharField(db_column='Email_id', unique=True) 
    eid = PrimaryKeyField()  
    class Meta: 
     db_table = 'employeelist' 


class Message(BaseModel): 
    mid = PrimaryKeyField() 
    sender = ForeignKeyField(Employee, 
          related_name='messages', 
          to_field='email') # was CharField() before my edit 

    class Meta: 
     db_table = 'message' 

Однако, когда я пытаюсь запустить:

for message in Message.select(): 
    print message.mid 

Я получаю сообщение об ошибке:

Traceback (most recent call last): 
    File "DBModelEnron.py", line 62, in <module> 
    for message in Message.select(): 
    File "/usr/local/lib/python2.7/dist-packages/peewee.py", line 2514, in __iter__ 
    return iter(self.execute()) 
    File "/usr/local/lib/python2.7/dist-packages/peewee.py", line 2507, in execute 
    self._qr = ResultWrapper(model_class, self._execute(), query_meta) 
    File "/usr/local/lib/python2.7/dist-packages/peewee.py", line 2203, in _execute 
    return self.database.execute_sql(sql, params, self.require_commit) 
    File "/usr/local/lib/python2.7/dist-packages/peewee.py", line 2833, in execute_sql 
    self.commit() 
    File "/usr/local/lib/python2.7/dist-packages/peewee.py", line 2688, in __exit__ 
    reraise(new_type, new_type(*exc_value.args), traceback) 
    File "/usr/local/lib/python2.7/dist-packages/peewee.py", line 2825, in execute_sql 
    cursor.execute(sql, params or()) 
    File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 174, in execute 
    self.errorhandler(self, exc, value) 
    File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler 
    raise errorclass, errorvalue 
peewee.OperationalError: (1054, "Unknown column 't1.sender_id' in 'field list'") 

я нашел подобную проблему here , однако у меня есть правильный PrimaryKey.

ответ

2

Просто добавьте db_column='' ваши внешние ключи:

sender = ForeignKeyField(Employee, 
         db_column='sender', # Added this. 
         related_name='messages', 
         to_field='email') # was CharField() before my edit