SQLAlchemy 关系在创建 backref 时引发参数错误

Nic*_*ler 2 python sqlalchemy

我正在尝试建立一对多的关系,以便每个咖啡馆都可以有很多评论。但是,SQLAlchemyArgumentError在定义关系时会引发。我该如何解决这个错误?

class Review(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    cafe = db.Column(db.String, db.ForeignKey('cafe.name'))

class Cafe(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)
    reviews = db.relationship(Review, backref='cafe')
Run Code Online (Sandbox Code Playgroud)
sqlalchemy.exc.ArgumentError: Error creating backref 'cafe' on relationship 'Cafe.cafes': property of that name exists on mapper 'Mapper|Review|review'
Run Code Online (Sandbox Code Playgroud)

dav*_*ism 6

当 SQLAlchemy 尝试为Cafe.cafes调用的关系创建 backrefcafeReview,它会找到您命名的列cafe并引发错误,指出它不能使用相同的名称。

为您的外键指定与您的关系/反向引用不同的名称。

cafe_name = db.Column(db.ForeignKey(Cafe.name))
Run Code Online (Sandbox Code Playgroud)

或者,当外键和关系在同一模型中定义时,跟踪名称会更容易。

class Cafe(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)

class Review(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    cafe_id = db.Column(db.ForeignKey(Cafe.id))
    cafe = db.relationship(Cafe, backref='reviews')
Run Code Online (Sandbox Code Playgroud)