定义backref参数

时间:2014-10-14 00:06:12

标签: sql flask sqlalchemy flask-sqlalchemy

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')

在这个例子中,我重写了表名。那么,背反应该是什么? tablename或班级名称?或者可以是其他什么?

来自文档:

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

那么,backref的名称只是一般性描述?

如果我有两张表使用国家表,我需要创建两个关系,就像在我的例子中一样?该程序是另一个表中每个参考的一个关系吗?

3 个答案:

答案 0 :(得分: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.

答案 1 :(得分:0)

喜欢这个?这将使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")

答案 2 :(得分:0)

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

  

那么,背反应该是什么?表名或类名?或者可以是其他什么?

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

  

那么,backref的名称只是一般描述?

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

  

如果我有两张表使用国家表,我需要创建两个关系,就像在我的例子中一样?该程序是另一个表中每个参考的一个关系吗?

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

希望它有所帮助:)