我正在评估在异步/等待 FastAPI 应用程序中使用SQLAlchemy的潜在设置。目前我正在使用 declarative_base
类组合模型和查询,然后使用 Databases 执行查询(对于模型类来说,语法更可读且更易编写;直接使用SQLAlchemy核心表不是我的最爱)。这一切都非常好用。
此时,我已经有了SQLAlchemy的结果行,但需要将它们转换为通用字典,由于预加载关系可能会嵌套 (这种类型是我在此环境中支持的唯一类型)。我无法使用SQLAlchemy的ORM,因为1)我没有engine
或session
;并且2)ORM假定它可以随时访问数据库以加载对象,而这在异步/等待的FastAPI应用程序中不是情况。
有没有人有想法或指针可以帮助完成这个任务?我正在努力想出如何将结果行与特定的关系键相关联。尤其是,我一直在探索SQLAlchemy内部以获取灵感,但这相当不透明,因为它假设整个对象缓存层和会话/引擎管理层在我的设置中不存在。
我需要想法的两件事:
- 如何将列名称(例如
table_1_column_name
)映射到特定的模型及其属性 - 如何检测和映射关系(可能超过一级深度)
感谢您提供的任何帮助!
更新:您可以在此处找到可运行的示例:https://gist.github.com/onecrayon/dd4803a5099061fa48d52f2d4bc2396b(请参见第92-109行,以了解我需要弄清楚如何通过将查询列名称映射到SQLAlchemy模型上的名称来将RowProxy转换为嵌套字典的相关位置)。