sqlalchemy backref没有名字但是级联

时间:2013-04-06 10:08:35

标签: python sqlalchemy

我们为注册到系统的人员提供了一个User类。我们有一大堆属于用户的类(和插件添加更多)。因此,如果用户被删除,他的东西应该被删除。 所以这就是我们目前正在做的事情:

class User(Base):
    id = Column(Integer, primary_key=True)
class Thing(Base):
    user_id = Column(Integer, ForeignKey(User.id))
    user = relationship(
        User,
        backref=backref("list_of_things",
            cascade="all, delete-orphan"))

这很有效。

假设我们从不使用User.list_of_things:有没有办法将其排除在外?但仍然得到backref级联行为?如果我们需要User.list_of_things,我们当然可以添加它。但在那之前,把它留下来会很好。

你可以说“嗯,只是说出一个名字并且不在乎”。这就是我们正在做的事情。两件事:

  1. 我们需要为那个东西定义一个命名约定,这样来自插件的名称就不会在User类上与其他插件和/或我们的主要属性发生冲突。
  2. 会让事情更易于阅读/写作。
  3. 小更新:对我们手头的问题的未经测试的解决方案将是一个混合线,但它不会回答没有名称的backrefs的问题:

    class OwnedbyUserMixin(object):
        @declared_attr
        def user_id(cls):
            return Column(Integer, ForeignKey(User.id),
                nullable=False)
    
        @declared_attr
        def user(cls):
            return relationship(
                User,
                backref=backref("list_of_" + cls.__tablename__,
                    cascade="all, delete-orphan"))
    

0 个答案:

没有答案