一、对于单表查询
首先有一个User模型
class User(db.Model):
__tablename__ = 'user'
uid = Column(Integer, primary_key=True)
username = Column(String(15), nullable=False, unique=True)
password_hash = Column(String(300), nullable=False)
查询User表所有内容
users = db.session.query(User).all()
print(users)
将查询的结果打印出来
显然list里面包含着两个User类对象,现在我们把这个对象转化成python字典就可以了,转化的代码如下
def class_to_dict(obj):
is_list = obj.__class__ == [].__class__
is_set = obj.__class__ == set().__class__
if is_list or is_set:
obj_arr = []
for o in obj:
dict = {}
a = o.__dict__
if "_sa_instance_state" in a:
del a['_sa_instance_state']
dict.update(a)
obj_arr.append(dict)
return obj_arr
else:
dict = {}
a = obj.__dict__
if "_sa_instance_state" in a:
del a['_sa_instance_state']
dict.update(a)
return dict
使用它:
users = db.session.query(User).all()
print(class_to_dict(users))
得到结果为:
[{
'username': 'admin',
'password_hash': 'pbkdf2:sha256:50000$am6yZ6m9$ac369f910409f8b4663ba16f3b827bc67984c1f015bb08e3b018022c1543f196',
'uid': 9,
}, {
'username': 'test',
'password_hash': 'pbkdf2:sha256:50000$NB1oPRRj$2d5353c9d9d727099fbd615c614da5e218e2946ef95019336729b1bd6e0cf527',
'uid': 10,
}]
然后利用jsonify函数把这个结果转成json,retrun给前台就行了
二、多表查询
刚才已经建立了一个User表,现在再建立一个评论表Comment
class Comment(db.Model):
__tablename__ = 'comment'
cid = Column(Integer, primary_key=True)
content = Column(String(1000), nullable=False)
create_time = Column(String(30), nullable=False)
user = relationship('User', primaryjoin='Comment.user_id == User.uid', backref='comments')
现在联接查询
user_c = db.session.query(User,Comment).join(Comment).all()
#调用函数toJsonList
print(toJsonList(user_c))
#函数toJsonList,注意:toJsonList调用了class_to_dict函数,就是上面单表查询列出来的转换函数
def toJsonList(res):
count = 0
jsonList = []
dict = {}
for u in res:
for c in u:
count += 1
if (count <= len(u)):
dict.update(class_to_dict(c)) #函数classclass_to_dict
if count == len(u):
jsonList.append(dict)
else:
count = 1
dict = {}
dict.update(class_to_dict(c)) #函数classclass_to_dict
return jsonList;
得到结果
[
{
"content": "沙发",
"create_time": "2018-12-21 18:37",
"cid": 1,
"password_hash": "pbkdf2:sha256:50000$NB1oPRRj$2d5353c9d9d727099fbd615c614da5e218e2946ef95019336729b1bd6e0cf527",
"user_id": 10,
"uid": 10,
"username": "test"
},
{
"content": "来晚了",
"create_time": "2018-12-21 18:38",
"id": 2,
"password_hash": "pbkdf2:sha256:50000$NB1oPRRj$2d5353c9d9d727099fbd615c614da5e218e2946ef95019336729b1bd6e0cf527",
"user_id": 10,
"uid": 10,
"username": "test"
}
]
同样利用jsonify函数把这个结果转成json,retrun给前台就行了
多表查询转json需要注意的一点是
如果不同表里面有相同的字段名,转换出的结果会覆盖掉相同的字段名,导致查询结果缺失,建议建表时每张表字段名都不相同