sqlalchemy.exc.InvalidRequestError:一个或多个映射器无法初始化 - 无法继续初始化其他映射器

时间:2018-03-27 03:51:30

标签: python sqlalchemy

当我尝试访问该页面时发生此错误。我创建表时没有出错,但似乎还有问题。

模型是这样的:

class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), index=True, unique=True)
    sell_items = db.relationship('Item', backref='user')

class Item(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    item_name = db.Column(db.String(64), index=True)
    item_image = db.Column(db.String(200), index=True)
    price = db.Column(db.Float(10), index=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    user = db.relationship('User', backref='sell_items')

整个错误消息是这个

Triggering mapper: 'Mapper|User|user'. Original exception was: Error creating backref 'user' on relationship 'User.sell_items': property of that name exists on mapper 'Mapper|Item|item'

我该如何解决这个问题?我想要做的是参考销售该商品的username,但我不能。模型之间的关系存在问题。

2 个答案:

答案 0 :(得分:1)

当您使用backref时,会自动创建向后关系,因此它只应在关系的一侧使用。在您的情况下,您可以移除sell_items模型中的UserUser模型将自动从Item获得关系。

要在双方声明关系连接(例如,如果要自定义其名称,请使用back_populates='name_of_relationship_on_other_model'

答案 1 :(得分:0)

在您的Item类中,替换此行

user = db.relationship('User', backref='sell_items')

与此行

user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

它应该以这种方式工作,从那里您可以像这样item = Item.query.first(),然后item.sell_items ...进行查询,以获取发布该项目的用户。

我希望能帮上忙。