这里有很多连接один ко многим,例如 和Agents之间Offers。Realties和之间Flat显示为 1:m,但应该是 1:1。
我试图这样做 1:m
class Offer(db.Model):
id = db.Column(db.BigInteger, primary_key=True, autoincrement=True)
agent = db.Column(db.BigInteger, db.ForeignKey('agent.id'))
client = db.Column(db.BigInteger, db.ForeignKey('client.id'))
realty = db.Column(db.BigInteger, db.ForeignKey('realty.id'))
price = db.Column(db.Float, nullable=False)
class Agent(db.Model):
id = db.Column(db.BigInteger, primary_key=True, autoincrement=True)
first_name = db.Column(db.String(100), nullable=False)
last_name = db.Column(db.String(100), nullable=False)
middle_name = db.Column(db.String(100), nullable=False)
rate = db.Column(db.Float, default=45.)
offers = db.relationship('Offer', backref='agent', lazy='dynamic') # 1:m Agent -> Offers
所以对于 1:1
class Flat(db.Model):
id = db.Column(db.BigInteger, primary_key=True, autoincrement=True)
city = db.Column(db.String(100), nullable=False)
street = db.Column(db.String(100), nullable=False)
house_num = db.Column(db.String(100), nullable=False)
flat_num = db.Column(db.String(100), nullable=False)
longitude = db.Column(db.String(20), nullable=True)
latitude = db.Column(db.String(20), nullable=True)
area = db.Column(db.Float, nullable=False)
rooms = db.Column(db.Integer, nullable=False)
realty = db.relationship('Realty', backref='flat', uselist=False) # 1:1 Flat <-> Realty
class Realty(db.Model):
id = db.Column(db.BigInteger, primary_key=True, autoincrement=True)
flat = db.Column(db.BigInteger, db.ForeignKey('flat.id'))
parcel = db.Column(db.BigInteger, db.ForeignKey('parcel.id'))
house = db.Column(db.BigInteger, db.ForeignKey('house.id'))
offers = db.relationship('Offer', backref='realty', lazy='dynamic') # 1:m Realty -> Offers
链接是否正确?因为从readthedocs到flask-slqaclhemy我都看不懂,因为 第一次没有架构很难,而且 PyCharm 没有突出显示 backref 之类的一些参数,我认为这是一个错误。

一般来说,正确的选项如下:如果有 1:m 连接,那么在
1我们离开的表中<название поля(любое)> = db.relationship(<Название таблицы m>, backref=<уникальное название для этой связи>)。backref必须是唯一的,否则会出现这样的关系已经存在的错误。那些。例如,如果您有一个模型User并且它与表相关联PostsandFollowers,那么它将backref不是user,而是user_postsanduser_followers例如。在有关系的表中,m我们设置db.Column(<тип поля id со связью 1>, db.ForeignKey('user'))外键的值等于实体的名称。如果我们想设置一个 1:1 的关系,那么我们在关系中放入另一个参数uselist=False。