SQLAlchemy混入、外键与关系

6 投票
1 回答
2415 浏览
提问于 2025-04-17 12:32

我在创建一个简单的混合类时遇到了问题,这个混合类我打算在很多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

这是一个操作顺序的问题。我没有仔细查看输出。简单来说,我是在没有创建任何用户之前,就试图给一个用户分配值。

撰写回答