【问题标题】:sqlalchemy mixin, foreignkey and relationsqlalchemy mixin,外键和关系
【发布时间】: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


【解决方案1】:

这是一个操作顺序问题。我没有仔细阅读输出。基本上我试图在创建任何用户之前分配一个用户。

【讨论】:

  • 我不会说有必要删除这个问题——其他设计类似系统的人可能会在他们的代码中产生类似的错误——你的问题将帮助他们指出正确的方向。如果您想要删除它,您的问题下方应该有一个delete链接。
  • 很公平。我删除了有关删除它的多余评论,并将在明天将其标记为已回答。谢谢。
猜你喜欢
  • 2017-05-24
  • 2018-11-14
  • 2013-09-19
  • 2018-03-03
  • 2011-02-25
  • 1970-01-01
  • 1970-01-01
  • 2014-08-19
  • 2021-07-10
相关资源
最近更新 更多