将SQLAlchemy ORM查询结果转换为JSON而不是创建ORM对象

2024-05-18 10:53:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为一个小企业开发一个webapp,它应该是某种小型ERP。这个webapp是用AngularJS构建的,所以我主要使用服务器端来管理数据库并提供一个很好的restapi。在

我非常喜欢使用ORMs,它非常适合我的需要。我选择SQLAlchemy作为我的数据库层,因为我发现使用它非常简单和方便(我也喜欢Python)。但是,当使用SQLAlchemy的ORM层时,如果您想查询一些实体的结果(必要时包括它的子对象),它会执行请求的查询(这相当快),但是,每当它得到结果时,它会为每个结果创建一个Python对象,并且(据我的理解),维护这些结果对象需要做很多工作,允许用户使用它们并使它们与数据库保持同步。然而,包装结果和创建SQLAlchemy实体(我认为这在SQLAlchemy中被称为工作单元)非常慢(几千个结果需要几秒钟才能完成),而不仅仅是快速地获得结果(以元组为单位)。在

问题是,由于我使用的是AngularJS,所以我只想将这些结果转换为JSON,而不是先将它们转换为Python对象并进行大量不必要的工作。 我非常喜欢使用ORM,因为它可以帮助您管理嵌套的查询和关系,但是如果我没有选择,我可能会回到SQLAlchemy Core,但是对于我来说,将结果解析为JSON对象(并管理restapi的所有查询)将非常困难,其中一些将是用户构建的自定义查询。。。毕竟这是一个管理系统。SQLAlchemy的ORM已经完成了结果解析和生成查询,我只想它创建JSON对象(实际上可以只是Python的字典和列表),而不是创建纯Python对象。在

如何实现我想要的?在

TL;DR

阅读标题。在


Tags: 对象用户实体restapi数据库jsonerpsqlalchemy
1条回答
网友
1楼 · 发布于 2024-05-18 10:53:15

如果您有幸使用了最新的PostgreSQL,那么可以在服务器端使用recent JSON functions,例如row_to_json()函数:

 select row_to_json(mytable) from mytable

它以'{“column”:“value”,“column2”:“value2”}格式的字符串返回每一行。然后,您可以使用SQLAlchemy Core直接迭代结果行到客户端,而不必在Python中接触它们。在

相关问题 更多 >