我無法創建簡單的mixin,我打算在一堆sqlalchemy聲明類上使用。基本的想法是我想要創建/修改時間戳和存儲在多個表上的創建/修改用戶。 mixin位於其自己的文件(global_mixins.py)中,並且該類在每個需要mixin的模型文件中導入。當我運行數據導入時,出現代碼下面的錯誤。sqlalchemy mixin,foreignkey和關係
class TimeUserMixin(object):
create_time = Column(DateTime,default=datetime.datetime.now,nullable=False)
modify_time = Column(DateTime,default=datetime.datetime.now,
onupdate=datetime.datetime.now,nullable=False)
@declared_attr
def create_user_id(cls):
return Column(Integer,ForeignKey('tg_user.user_id'),
default=cls.get_user_id,nullable=False)
@declared_attr
def modify_user_id(cls):
return Column(Integer,ForeignKey('tg_user.user_id'),
default=cls.get_user_id,onupdate=cls.get_user_id,nullable=False)
@declared_attr
def create_user(cls):
return relation('User',primaryjoin='%s.create_user_id == User.user_id'%cls.__name__)
@declared_attr
def modify_user(cls):
return relation('User',primaryjoin='%s.modify_user_id == User.user_id'%cls.__name__)
@classmethod
def get_user_id(cls):
#will eventually return user id if logged in or a generic system user.
return 1
Error(DETAIL: Key (create_user_id)=(1) is not present in table "tg_user".)
是否缺少tg_user聲明? – Bryan 2012-02-07 20:45:55
不確定你的意思。 tg_user是表名。應該使用類名來設置ForeignKey? ForeignKey('User.user_id')? – Ominus 2012-02-07 20:55:43
它應該是表名,而不是類名。但我期望看到類tg_user表聲明在某處,如下所示:http://pastebin.com/3VCAaxJT。然後,我再也沒有使用過mixins,所以我純粹從閱讀這些內容開始講:http://docs.sqlalchemy.org/en/latest/orm/extensions/declarative.html#mixing-in-relationships – Bryan 2012-02-07 21:09:11