当前位置: 首页 > news >正文

【flask sqlalchmey】一次性将返回的列表对象或者 一行数据对象转成dict---flask-sqlalchemy输出json格式数据


def model_to_dict(object):return {c.name: getattr(object, c.name) for c in object.__table__.columns}#将一组数据转为list
def scalars_to_list(object):return [model_to_dict(c) for c in object]class Sysdict(Base,SerializerMixin):__bind_key__ = 'forest_fire_control_manage'__tablename__ = 'sys_dict'id = Column(Integer, primary_key=True)code = Column(String(100))parent_code = Column(String(100)) name = Column(String(60))seq = Column(Integer)dict_type = Column(String(100))if __name__ == "__main__":app = create_app()with app.app_context():res = Sysdict.query.all()#将单个数据转为dict#   for c in res[0].__table__.columns:#       print(c.name)#       print(getattr(res[0], c.name))print(scalars_to_list(res)

结果示例:

[{'id': 1, 'code': 'class_land_type', 'parent_code': 'root', 'name': '地类', 'seq': 0, 'dict_type': 'class_info'}, {'id': 37, 'code': 'forest_type', 'parent_code': 'root', 'name': '林种', 'seq': 0, 'dict_type': 'class_info'}, {'id': 64, 'code': 'forest_right', 'parent_code': 'root', 'name': '权属', 'seq': 0, 'dict_type': 'class_info'}, {'id': 68, 'code': 'terrain', 'parent_code': 'root', 'name': '地形', 'seq': 0, 'dict_type': 'class_info'}, {'id': 75, 'code': 'slope_position', 'parent_code': 'root', 'name': '坡位', 'seq': 0, 'dict_type': 'class_info'}, {'id': 82, 'code': 'slope_direction', 'parent_code': 'root', 'name': '坡向', 'seq': 0, 'dict_type': 'class_info'}, {'id': 84, 'code': 'soil_type', 'parent_code': 'root', 'name': '土壤类型', 'seq': 0, 'dict_type': 'class_info'}, {'id': 86, 'code': 'forest_protect_level', 'parent_code': 'root', 'name': '林地保护等级', 'seq': 0, 'dict_type': 'class_info'}, {'id': 91, 'code': 'domaint_tree_type', 'parent_code': 'root', 'name': '优势树种', 'seq': 0, 'dict_type': 'class_info'}, {'id': 117, 'code': 'origin', 'parent_code': 'root', 'name': '起源', 'seq': 0, 'dict_type': 'class_info'}, {'id': 124, 'code': 'age', 'parent_code': 'root', 'name': '龄组', 'seq': 0, 'dict_type': 'class_info'}]

另外:
res = Sysdict.query.all() 这种写法已经不被推荐了,
推荐的是scalar_one() 获取一行,scalars()获取多行
user = db.session.execute(db.select(User).filter_by(username=username)).scalar_one()

users = db.session.execute(db.select(User).order_by(User.username)).scalars()

一般的
json.dumps(users)
或者
jsonify(users)

都会出现错误:Object of type ScalarResult is not JSON serializable
所以,使用这两个方法解决:
def model_to_dict(object):
return {c.name: getattr(object, c.name) for c in object.table.columns}

#将一组数据转为list
def scalars_to_list(object):
return [model_to_dict© for c in object]

ref:https://blog.csdn.net/weixin_53632096/article/details/129986590

http://www.lryc.cn/news/120979.html

相关文章:

  • goland插件推荐Rider UI Theme Pack
  • 人工智能面试常识-10
  • Android JNI开发从0到1,java调C,C调Java,保姆级教程详解
  • STM32基于CubeIDE和HAL库 基础入门学习笔记:功能驱动与应用
  • 创建型模式 (Creational Patterns) 玄子Share 设计模式 GOF 全23种 + 七大设计原则
  • 【脚踢数据结构】队列(顺序和链式)
  • linux添加磁盘
  • 图片懒加载
  • scope,deep穿透的实际应用
  • Multipass虚拟机设置局域网固定IP同时实现快速openshell的链接
  • Webpack5 core-js和babel-loader区别和用法
  • 软考高级架构师——5、系统规划分析与设计方法
  • 区块链学习6-长安链部署:如何创建特定共识节点数和同步节点数的链
  • 北航基于openEuler构建工业机器人操作系统,打造“开箱即用”的机器人基础软件平台
  • 孤儿进程与僵尸进程
  • redis的基础命令01
  • 批量将excel文件合并
  • 关于Vue与服务器端的通信:如何实现登录鉴权
  • GrapeCity Documents for Excel, .NET Crack
  • wordpress网站Ajax留言评论+自定义评论字段
  • AJAX-笔记(持续更新中)
  • 模板复用和文章详情页(Go搭建qiucode.cn 之七)
  • Android 使用SQLite的案例详解
  • linux 命令--查看网络端口命令
  • python一个请求chatgpt3.5模型例子
  • 数据结构:栈的实现(C实现)
  • v-md-editor自定义锚点(生成目录)数组转树结构
  • java 11 新特效解读(2)
  • linux patch 和 git patch
  • 【vue Dplayer】播放hls视频流