Nick Mueller
Nick Mueller

Reputation: 121

SQLAlchemy relationship raise Argument error when creating backref

I am trying to build a one to many relationship so that each cafe can have many reviews. However, SQLAlchemy raises an ArgumentError when defining the relationship. How do I fix this error?

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')
sqlalchemy.exc.ArgumentError: Error creating backref 'cafe' on relationship 'Cafe.cafes': property of that name exists on mapper 'Mapper|Review|review'

Upvotes: 2

Views: 1910

Answers (1)

davidism
davidism

Reputation: 127300

When SQLAlchemy tries to create the backref for the Cafe.cafes relationship called cafe on Review, it finds the column you named cafe and raises an error that it can't use the same name.

Give your foreign keys different names than your relationships/backrefs.

cafe_name = db.Column(db.ForeignKey(Cafe.name))

Alternatively, it can be easier to keep track of names when the foreign key and relationship are defined in the same model.

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

Upvotes: 6

Related Questions