【发布时间】:2012-02-29 06:42:49
【问题描述】:
我无法创建一个我计划在一堆 sqlalchemy 声明性类上使用的简单 mixin。基本思想是我想要一个创建/修改时间戳和一个存储在多个表上的创建/修改用户。 mixin 在它自己的文件 (global_mixins.py) 中,并且该类被导入到需要 mixin 的每个模型文件中。当我运行数据导入时,我收到代码下方的错误。
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 声明?
-
不确定你的意思。 tg_user 是表名。应该使用类名设置 ForeignKey 吗? ForeignKey('User.user_id') ?
-
应该是表名,不是类名。但我希望在某处看到 tg_user 表的类声明,如下所示:pastebin.com/3VCAaxJT。再说一次,我从来没有使用过 mixins,所以我纯粹是通过阅读这些来说话:docs.sqlalchemy.org/en/latest/orm/extensions/…
标签: python sqlalchemy