- 反向读取数据竟然报错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即可
网友评论