优化Django ORM查询

Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。

Django ORM(对象关系映射)是Django最强大的功能之一,它使我们能够通过Python代码而非SQL与数据库进行交互。

它有很多优点:

  • 数据库引擎由我们抽象,因此可以轻松切换到另一个数据库系统;

  • 支持迁移:我们可以通过更新模型来轻松地更改表,Django会自动生成更新数据库表所需的迁移脚本;

  • 支持事务:可以在一个事务中对数据库进行多次更新,如果失败,会回滚到初始状态;

但是它也有一些缺点:

  • 由于它基于SQL抽象而来,因此比较晦涩难懂,我们无法确切地知道Python代码生成哪些SQL查询;

  • Django无法得知我们何时需要使用关联表,因此无法使用JOINs

  • ORM给人一种错觉,让我们以为一些操作不会耗费什么代价。然而我们无法得知当获取一个对象属性所触发的数据库查询是否会被JOIN阻止;

为了克服这些缺点,我们需要进一步了解Django及其背后的原理。

了解机制

首先,我们需要了解系统正在发生什么,哪些SQL查询正在被执行以及哪些操作最消耗资源。

以下是检查SQL查询执行时的几种不同机制:

1.connection.queries


英文原文:http://schegel.net/posts/optimizing-django-orm-queries/
译者:我是昵称耶~