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