具有自定义 SQL 延迟查询集的 Python 异步 SQL ORM
我通常使用 Python ORM,如 Tortoise ORM 或 Ormar ORM(因为它们是异步的,与 FastAPI 集成良好,具有非常好的性能(对于 Tortoise ORM),可以使用单个 Pydantic/类型提示模型(对于 Ormar)。当然也出于习惯。)
但是,我现在有一个用例,似乎我无法使用 Tortoise ORM 或 Ormar ORM: 我想在现有查询集上延迟应用自定义 SQL 查询(延迟,我的意思是两个连续的查询只需要稍后执行一次)。
例如,当前简化的 Tortoise ORM 惰性查询逻辑:
async def main() -> list:
await connect_db()
query_1 = Users.all().only("id", "name", "age")
query_2 = query_1.order_by("-age")
return await query_2
我需要应用一个查询(例如 query_3
),但使用自定义 SQL,所以我会得到类似的结果:
async def main() -> list:
await connect_db()
query_1 = Users.all().only("id", "name", "age")
query_2 = query_1.order_by("-age")
query_3 = query_2.custom_query("SELECT id, name, age FROM users WHERE age > 18;")
return await query_3
我可以使用 ORM 做类似的事情吗?哪一个以及如何?谢谢!
I generally use Python ORMs like Tortoise ORM or Ormar ORM (because they're async, integrate well with FastAPI, have very good performances (for Tortoise ORM), can use single Pydantic/type-hinted models (for Ormar). And of course also from habit.)
However, I have now a use case it seems I cannot do with Tortoise ORM neither Ormar ORM:
I would like to do lazily apply custom SQL queries on existing querysets (by lazily, I mean the two consecutive queries need to be executed only once, later).
e.g. current simplified Tortoise ORM lazy query logic:
async def main() -> list:
await connect_db()
query_1 = Users.all().only("id", "name", "age")
query_2 = query_1.order_by("-age")
return await query_2
I would need to apply one query (say query_3
) but with custom SQL, so I would have something like that:
async def main() -> list:
await connect_db()
query_1 = Users.all().only("id", "name", "age")
query_2 = query_1.order_by("-age")
query_3 = query_2.custom_query("SELECT id, name, age FROM users WHERE age > 18;")
return await query_3
Can I do something like that with an ORM? Which one and how? Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论