这两个一对多的关系有什么区别吗?

时间:2017-08-18 18:40:26

标签: python sqlalchemy

class City(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    cityname = db.Column(db.String(50))
    country_id = db.Column(db.Integer, db.ForeignKey('country.id'))
    country = db.relationship('Country',
                              backref=db.backref('cities', lazy='dynamic'))

class Country(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    countryname = db.Column(db.String(50))

这两个一对多关系之间有什么区别吗?

class City(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    cityname = db.Column(db.String(50))
    country_id = db.Column(db.Integer, db.ForeignKey('country.id'))


class Country(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    countryname = db.Column(db.String(50))
    cities = db.relationship('City', backref='country', lazy='dynamic')

这两种捕获国家有多个城市的相同方法是什么?

1 个答案:

答案 0 :(得分:2)

是的,这两种方法实现了一对多关系的相同效果(表构造是相同的),区别在于声明关系

我个人的偏好是在两个模型上声明关系,因为它更明确并且有助于IDE(自动完成)。您可以使用back_populates代替backref

来执行此操作
  

采用字符串名称,与backref具有相同的含义,除了   补充属性不是自动创建的,而是必须的   在其他映射器上显式配置。补充   属性还应该表明back_populate与此关系   确保正常运作。

class City(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    ...
    country_id = db.Column(db.Integer, db.ForeignKey('country.id'))
    country = db.relationship('Country', back_populates='cities')

class Country(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    ...
    cities = db.relationship('City', back_populates='country')