【问题标题】:sqlalchemy.exc.InvalidRequestError: One or more mappers failed to initialize - can't proceed with initialization of other mapperssqlalchemy.exc.InvalidRequestError:一个或多个映射器无法初始化 - 无法继续初始化其他映射器
【发布时间】:2018-07-20 01:09:20
【问题描述】:

当我尝试访问该页面时发生此错误。创建表时我没有收到错误,但似乎仍然存在问题。

模型是这样的:

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,但我不能。模型之间的关系有问题。

【问题讨论】:

标签: python sqlalchemy


【解决方案1】:

当您使用backref 时,会自动创建后向关系,因此只能在关系的一侧使用它。在您的情况下,您可以删除User 模型中的sell_itemsUser 模型将自动从Item 获取关系。

声明双方的关系(如果你想自定义它的名字,例如,使用back_populates='name_of_relationship_on_other_model'

【讨论】:

  • 其实还是解决不了像itam.user.username这样不能引用的问题。我真的很困惑。
  • 这听起来像是另一个问题的另一个错误——尽管先做你的研究。请不要移动球门柱。
【解决方案2】:

在您的 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... 来获取发布该项目的用户。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    • 2014-01-09
    • 2020-01-14
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多