美文网首页
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