- 反向讀取數(shù)據(jù)竟然報(bào)錯(cuò)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)
錯(cuò)誤代碼
def get(self):
front_user = FrontUser.query.filter_by(id=1).first()
print(front_user.shop_templates.template)
上面打印竟然報(bào)錯(cuò)
找了半天才發(fā)現(xiàn)這個(gè)錯(cuò)誤是因?yàn)閟qlalchemy是默認(rèn)一對(duì)多的關(guān)系羔杨。
反向定義查出來的是列表而不是單個(gè)對(duì)象
正確代碼
#方法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對(duì)1 捌臊,而非一對(duì)多。指定uselist=False即可