如何将SQLAlchemy结果行转换为嵌套字典

One*_*yon 5 python sqlalchemy async-await fastapi

我正在评估在异步/等待FastAPI应用程序中使用SQLAlchemy的潜在设置。目前,我正在使用declarative_base类编写模型和查询,然后使用数据库执行查询(对于模型类,语法更易读易写;直​​接使用SQLAlchemy核心表不是我的最爱活动)。这一切都很好。

在这一点上,我有SQLAlchemy结果行,但是我需要将它们转换为通用dict,由于急切加载的关系而可能嵌套(仅在此环境中支持类型)。我不能使用SQLAlchemy的ORM,因为1)我没有engineor session;2)ORM假定只要需要将其加载到对象中就可以访问数据库,而在异步/等待FastAPI应用程序中则不是这种情况。

是否有人对如何实现这一目标有想法或指示?我正在努力弄清楚如何将结果行与特定的关系键相关联。我一直在研究SQLAlchemy的内部思想,但是它很不透明,因为其中很多都假设我的设置中没有出现整个对象缓存和会话/引擎管理层。

我可以使用以下两点想法:

  1. 如何将列名称映射table_1_column_name到特定模型及其属性
  2. 如何检测和映射关系(可能超过一个层次)

感谢您的任何帮助,您可以提供!

更新:您可以在此处找到一个可运行的示例:https : //gist.github.com/onecrayon/dd4803a5099061fa48d52f2d4bc2396b(有关位置,请参见第92-109行,我需要弄清楚如何通过映射将RowProxy转换为嵌套字典查询列名称到SQLAlchemy模型上的名称)。

小智 2

如果你是 db First,sqlalchemy 的执行方法通常会返回一个Result Proxy对象,你可以使用 fetchone、first、fetchall 等方法获取它的结果,然后将其转换为 list 或 dict。您还可以看到这个码头