flask-sqlalchemy 反向读取报错

  • 反向读取数据竟然报错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 反向读取报错)