SQLAlchemy混入、外键与关系
我在创建一个简单的混合类时遇到了问题,这个混合类我打算在很多SQLAlchemy声明类中使用。基本的想法是我想在多个表中存储创建和修改的时间戳,以及创建和修改的用户信息。这个混合类放在一个单独的文件里(global_mixins.py),然后在需要这个混合类的每个模型文件中导入它。当我运行数据导入时,下面的代码出现了错误。
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".)
1 个回答
3
这是一个操作顺序的问题。我没有仔细查看输出。简单来说,我是在没有创建任何用户之前,就试图给一个用户分配值。