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')
这两种捕获国家有多个城市的相同方法是什么?
答案 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')