【问题标题】:Define backref parameter定义 backref 参数
【发布时间】:2014-10-14 00:06:12
【问题描述】:
class Country(db.Model):
    __tablename__ = 'countries'
    id = db.Column(db.Integer, primary_key=True)
    code = db.Column(db.Integer)
    name_en = db.Column(db.String(100))
    user_country = db.relationship('User', backref='country')
    company_country = db.relationship('Company', backref='country')

在此示例中,我将覆盖表名。那么,backref 应该是什么? tablename 还是类名?或者可以是别的什么?

来自文档:

backref 也是一种在 xxxxx 类上声明新属性的简单方法

所以backref这个名字只是一个笼统的描述?

如果我有两个使用国家/地区表的表,我需要创建两个关系,就像在我的示例中一样?该过程是另一个表中每个引用的一个关系?

【问题讨论】:

    标签: sql flask sqlalchemy flask-sqlalchemy


    【解决方案1】:

    你可以参考这个例子。

      class Parent(Base):
            __tablename__ = 'parent'
            id = Column(Integer, primary_key=True)
            children = relationship("Child", backref="parent")
    
      class Child(Base):
            __tablename__ = 'child'
            id = Column(Integer, primary_key=True)
            parent_id = Column(Integer, ForeignKey('parent.id'))
    

    将 Child 存储在 Parent 中

    获取父对象。

    p = Parent.query.get(1)
    

    使用 backref 存储在子对象中

    c = Child(parent=p)
    db.session.add(c)
    db.session.commit()
    

    要通过子对象访问parend,您将遵循此。 制作对象。

    child = Child ()
    

    通过 backref 访问。

    child.parent.
    

    【讨论】:

      【解决方案2】:

      像这样?这将使 user.country 变成类似于模型的东西

      class User(db.Model):
        __tablename__ = 'users'
        id = db.Column(db.Integer, primary_key=True)
        country = db.relationship("Country", backref="users")
      
      class Country(db.Model):
        __tablename__ = 'countries'
        id = db.Column(db.Integer, primary_key=True)
        user_country_id = db.Column(db.Integer, db.ForeignKey('users.id'))
        user_country = db.relationship("User")
      

      【讨论】:

        【解决方案3】:

        确实很困惑。另外sqlalchemy的文档冗长乏味,让人难以理解。

        那么,backref 应该是什么?表名还是类名?或者可以是别的什么?

        其他任何东西都可以成为 backref 名称

        所以,backref 的名称只是一个笼统的描述?

        是的,它会在您的类(换句话说,表)中动态添加一个属性。 因为 SQLAlchemy 使用元类,所以在您创建了至少一个 Client 类的实例之前,在另一个类上创建反向引用的代码不会运行。 更多详细信息请参见backref-class-attribute,例如通过Subject.client 访问backref。

        如果我有两个使用国家/地区表的表,我需要创建两个关系,就像在我的示例中一样?该过程是另一个表中每个引用的一个关系?

        听起来你想要多对多的关系。 association-tableflask-doc 都可以提供帮助。

        希望对你有帮助:)

        【讨论】:

          猜你喜欢
          • 2017-11-16
          • 2019-03-22
          • 1970-01-01
          • 2011-11-09
          • 2015-10-02
          • 2019-01-05
          • 2021-12-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多