从自定义查询返回模型而不访问数据库

Posted

技术标签:

【中文标题】从自定义查询返回模型而不访问数据库【英文标题】:Return a model from a custom query without hitting the database 【发布时间】:2011-04-08 17:14:41 【问题描述】:

我有一个自定义查询,它最终返回一个对象列表。我需要该函数来返回实际对象,但我不想为每个查询两次访问数据库,因为它已经是一个昂贵的查询。如何在不访问数据库的情况下返回模型实例?

注意:我认为执行以下操作实际上会创建不同模型的新实例?

return [Object(pk=row[0]) for row in results]

注意:我还假设这会在函数返回时访问数据库

return [Object.objects.get(pk=row[0]) for row in results]

【问题讨论】:

为什么不能返回查询集? @lazerscience:我猜测他发现 SQL 太复杂/无法使用 Django API 复制。 @lazerscience:是的,正如 Manoj 所说,使用 django ORM 无法完成 SQL。谢谢 【参考方案1】:

如果您有 Django 1.2+,您可以使用 raw() 方法使用自定义查询的结果返回 Model 实例列表。在你的情况下是这样的:

query = "<your query goes here>"
Object.objects.raw(query)

【讨论】:

太棒了。我刚刚切换到 1.2,一定是在发行说明中错过了!

以上是关于从自定义查询返回模型而不访问数据库的主要内容,如果未能解决你的问题,请参考以下文章

从自定义 UIViewController 导航到 TabBarController 而不使用 segue

不确定如何从自定义端点检索数据?

如何从自定义反应挂钩访问数据

从自定义名称获取关联

Firebase 大查询 - 如何从自定义事件表中检索数据

Laravel:如何从自定义 UserProvider 返回更多数据?