我无法创建简单的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