使用场景:
对于一些简单的表,可以直接通过该方法将数据查询对象进行序列化操作,转成python中列表或字典结构,再展示给前端。
1、model_to_dict方法:对单个查询对象序列化文章来源:https://www.toymoban.com/news/detail-516954.html
import json
import datetime
from flask_sqlalchemy import Model
#对单个模型操作
def model_to_dict(model, fields=None,exchange_fields=None):
"""
将Flask SQLAlchemy的模型对象转换为字典类型
:param: model : 模型对象
:param: fields : 需要获取的字段列表,默认为 None,获取全部字段
:param: exchange_fields : 需要替换名字的字段,{'数据库字段':'前端展示字段'},有些数据库字段名在展示时需要修改成前端需要的名字
:return: 返回字典类型
"""
#传递空值时
if not model:
return {}
#传递的对象不是查询数据库对象时,异常报错
if not isinstance(model,Model):
raise Exception('单个数据库查询对象转成字典,传递的查询对象类型有问题')
if fields is None:
# 获取所有列名
columns = [column.name for column in model.__table__.columns]
# 排除掉relationships 设置的反向查询字段
relations = getattr(model.__class__, '__mapper__').relationships
exclude_cols = [rel.key for rel in relations]
# print(exclude_cols,'要剔除的反向查询字段')
#拿到所有列名-排除的列名
cols = set(columns) - set(exclude_cols)
fields = list(cols)
obj_dict = {}
for field in fields:
if field not in model.__dict__:
continue
value = model.__dict__[field]
#1、对时间字段进行操作
if isinstance(value, datetime.datetime):
#字段类型是datetime的,格式化
value = value.strftime('%Y-%m-%d %H:%M:%S')
if isinstance(value,datetime.date):
#字段类型是date的,格式化
value = value.strftime('%Y-%m-%d')
#2、将所有可以进行反序列化的进行反序列化(将json字符串转成python结构数据类型)
if isinstance(value,str):
try:
value = json.loads(value)
except Exception as _:
pass
#3、替换展示的字段
if type(exchange_fields) == dict:
for db_field,show_field in exchange_fields.items():
#db_field 是数据库字段,show_field是展示字段名
if field==db_field:
field = show_field
obj_dict[field] = value
return obj_dict
2、model_to_list方法:查询结果是list时,对多个查询对象序列化文章来源地址https://www.toymoban.com/news/detail-516954.html
#对数据集操作
def model_to_dict_list(queryset,fields=None,exchange_fields=None):
#1、空对象操作
if not queryset:
return []
#2、数据类型控制
first = queryset[0]
if not isinstance(first,Model):
raise Exception('将数据对象转成python结构数据失败,传递进来的不是正确的模型对象列表')
#3、循环操作
ret = []
for obj in queryset:
dic = model_to_dict(obj,fields=fields,exchange_fields=exchange_fields)
ret.append(dic)
return ret
到了这里,关于Flask框架-数据库查询对象转字典或列表:实现model_to_dict的功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!