美文网首页
flask-sqlalchemy 反向读取报错

flask-sqlalchemy 反向读取报错

作者: py晓枫 | 来源:发表于2019-08-20 17:16 被阅读0次
  • 反向读取数据竟然报错AttributeError: 'InstrumentedList' object has no attribute
模型
#模板模型
class ShopTemplateModel(db.Model, BaseModel):
    __tablename__ = 'shop_template'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    template = db.Column(db.Text, nullable=False)
    app_user_id = db.Column(db.String(100), db.ForeignKey('front_user.id'))
    create_time = db.Column(db.DateTime, default=datetime.now)
    app_user = db.relationship('FrontUser', backref=db.backref('shop_templates'))

#用户模型
class FrontUser(db.Model, BaseModel):
    __tablename__ = 'front_user'
    id = db.Column(db.String(100), primary_key=True, default=shortuuid.uuid)
    phone_num = db.Column(db.String(11), nullable=False)
    _password = db.Column(db.String(100), nullable=False)
    create_time = db.Column(db.DateTime, default=datetime.now)

错误代码
    def get(self):
        front_user = FrontUser.query.filter_by(id=1).first()
        print(front_user.shop_templates.template)
  • 上面打印竟然报错

  • 找了半天才发现这个错误是因为sqlalchemy是默认一对多的关系。

  • 反向定义查出来的是列表而不是单个对象

正确代码

#方法1
    def get(self):
        front_user = FrontUser.query.filter_by(id=1).first()
        print(front_user.shop_templates[0].template)

#方法2
app_user = app_user = db.relationship('FrontUser', backref=db.backref('shop_templates', uselist=False))
  • 方法1:按照列表读取即可
  • 方法2:如果你使用的1对1 ,而非一对多。指定uselist=False即可

相关文章

网友评论

      本文标题:flask-sqlalchemy 反向读取报错

      本文链接:https://www.haomeiwen.com/subject/hcapsctx.html