我正在评估在 async/await FastAPI应用程序中使用 SQLAlchemy 的潜在设置。我目前正在使用declarative_base
类组合模型和查询,然后使用数据库执行查询(模型类的语法更具可读性和易于编写;直接使用 SQLAlchemy 核心表不是我最喜欢的活动)。这一切都很好。
此时,我有 SQLAlchemy 结果行,但我需要将它们转换为通用 dicts,由于急切加载的关系可能会嵌套(在此环境中仅支持我的类型)。我不能使用 SQLAlchemy 的 ORM,因为 1)我没有engine
or session
;和 2) ORM 假设它可以在需要加载对象时访问数据库,这在 async/await FastAPI 应用程序中并非如此。
有没有人对如何实现这一点有想法或指示?我正在努力弄清楚如何将结果行与特定的关系键相关联,特别是。我一直在 SQLAlchemy 内部寻找想法,但它非常不透明,因为其中很多假设我的设置中不存在整个对象缓存和会话/引擎管理层。
我可以使用以下两点想法:
- 如何将列名称映射
table_1_column_name
到特定模型及其属性 - 如何检测和映射关系(可能不止一层)
感谢您的任何帮助,您可以提供!
更新:您可以在这里找到一个可运行的示例:https : //gist.github.com/onecrayon/dd4803a5099061fa48d52f2d4bc2396b(有关我需要弄清楚如何通过映射将 RowProxy 转换为嵌套字典的相关位置,请参见第 92-109 行查询列名称到 SQLAlchemy 模型上的名称)。