Django

Code

root/django/branches/schema-evolution-ng/docs/db-api.txt

Revision 4281, 60.4 kB (checked in by jacob, 2 years ago)

Oops -- reverted accidentally commited material from [4280]

Line 
1 ======================
2 Database API reference
3 ======================
4
5 Once you've created your `data models`_, Django automatically gives you a
6 database-abstraction API that lets you create, retrieve, update and delete
7 objects. This document explains that API.
8
9 .. _`data models`: http://www.djangoproject.com/documentation/model_api/
10
11 Throughout this reference, we'll refer to the following models, which comprise
12 a weblog application::
13
14     class Blog(models.Model):
15         name = models.CharField(maxlength=100)
16         tagline = models.TextField()
17
18         def __str__(self):
19             return self.name
20
21     class Author(models.Model):
22         name = models.CharField(maxlength=50)
23         email = models.URLField()
24
25         def __str__(self):
26             return self.name
27
28     class Entry(models.Model):
29         blog = models.ForeignKey(Blog)
30         headline = models.CharField(maxlength=255)
31         body_text = models.TextField()
32         pub_date = models.DateTimeField()
33         authors = models.ManyToManyField(Author)
34
35         def __str__(self):
36             return self.headline
37
38 Creating objects
39 ================
40
41 To represent database-table data in Python objects, Django uses an intuitive
42 system: A model class represents a database table, and an instance of that
43 class represents a particular record in the database table.
44
45 To create an object, instantiate it using keyword arguments to the model class,
46 then call ``save()`` to save it to the database.
47
48 You import the model class from wherever it lives on the Python path, as you
49 may expect. (We point this out here because previous Django versions required
50 funky model importing.)
51
52 Assuming models live in a file ``mysite/blog/models.py``, here's an example::
53
54     from mysite.blog.models import Blog
55     b = Blog(name='Beatles Blog', tagline='All the latest Beatles news.')
56     b.save()
57
58 This performs an ``INSERT`` SQL statement behind the scenes. Django doesn't hit
59 the database until you explicitly call ``save()``.
60
61 The ``save()`` method has no return value.
62
63 To create an object and save it all in one step see the `create`__ method.
64
65 __ `create(**kwargs)`_
66
67 Auto-incrementing primary keys
68 ------------------------------
69
70 If a model has an ``AutoField`` -- an auto-incrementing primary key -- then
71 that auto-incremented value will be calculated and saved as an attribute on
72 your object the first time you call ``save()``.
73
74 Example::
75
76     b2 = Blog(name='Cheddar Talk', tagline='Thoughts on cheese.')
77     b2.id     # Returns None, because b doesn't have an ID yet.
78     b2.save()
79     b2.id     # Returns the ID of your new object.
80
81 There's no way to tell what the value of an ID will be before you call
82 ``save()``, because that value is calculated by your database, not by Django.
83
84 (For convenience, each model has an ``AutoField`` named ``id`` by default
85 unless you explicitly specify ``primary_key=True`` on a field. See the
86 `AutoField documentation`_.)
87
88 .. _AutoField documentation: http://www.djangoproject.com/documentation/model_api/#autofield
89
90 Explicitly specifying auto-primary-key values
91 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
92
93 If a model has an ``AutoField`` but you want to define a new object's ID
94 explicitly when saving, just define it explicitly before saving, rather than
95 relying on the auto-assignment of the ID.
96
97 Example::
98
99     b3 = Blog(id=3, name='Cheddar Talk', tagline='Thoughts on cheese.')
100     b3.id     # Returns 3.
101     b3.save()
102     b3.id     # Returns 3.
103
104 If you assign auto-primary-key values manually, make sure not to use an
105 already-existing primary-key value! If you create a new object with an explicit
106 primary-key value that already exists in the database, Django will assume
107 you're changing the existing record rather than creating a new one.
108
109 Given the above ``'Cheddar Talk'`` blog example, this example would override
110 the previous record in the database::
111
112     b4 = Blog(id=3, name='Not Cheddar', tagline='Anything but cheese.')
113     b4.save()  # Overrides the previous blog with ID=3!
114
115 See _`How Django knows to UPDATE vs. INSERT`, below, for the reason this
116 happens.
117
118 Explicitly specifying auto-primary-key values is mostly useful for bulk-saving
119 objects, when you're confident you won't have primary-key collision.
120
121 Saving changes to objects
122 =========================
123
124 To save changes to an object that's already in the database, use ``save()``.
125
126 Given a ``Blog`` instance ``b5`` that has already been saved to the database,
127 this example changes its name and updates its record in the database::
128
129     b5.name = 'New name'
130     b5.save()
131
132 This performs an ``UPDATE`` SQL statement behind the scenes. Django doesn't hit
133 the database until you explicitly call ``save()``.
134
135 The ``save()`` method has no return value.
136
137 How Django knows to UPDATE vs. INSERT
138 -------------------------------------
139
140 You may have noticed Django database objects use the same ``save()`` method
141 for creating and changing objects. Django abstracts the need to use ``INSERT``
142 or ``UPDATE`` SQL statements. Specifically, when you call ``save()``, Django
143 follows this algorithm:
144
145     * If the object's primary key attribute is set to a value that evaluates to
146       ``True`` (i.e., a value other than ``None`` or the empty string), Django
147       executes a ``SELECT`` query to determine whether a record with the given
148       primary key already exists.
149     * If the record with the given primary key does already exist, Django
150       executes an ``UPDATE`` query.
151     * If the object's primary key attribute is *not* set, or if it's set but a
152       record doesn't exist, Django executes an ``INSERT``.
153
154 The one gotcha here is that you should be careful not to specify a primary-key
155 value explicitly when saving new objects, if you cannot guarantee the
156 primary-key value is unused. For more on this nuance, see
157 "Explicitly specifying auto-primary-key values" above.
158
159 Retrieving objects
160 ==================
161
162 To retrieve objects from your database, you construct a ``QuerySet`` via a
163 ``Manager`` on your model class.
164
165 A ``QuerySet`` represents a collection of objects from your database. It can
166 have zero, one or many *filters* -- criteria that narrow down the collection
167 based on given parameters. In SQL terms, a ``QuerySet`` equates to a ``SELECT``
168 statement, and a filter is a limiting clause such as ``WHERE`` or ``LIMIT``.
169
170 You get a ``QuerySet`` by using your model's ``Manager``. Each model has at
171 least one ``Manager``, and it's called ``objects`` by default. Access it
172 directly via the model class, like so::
173
174     Blog.objects  # <django.db.models.manager.Manager object at ...>
175     b = Blog(name='Foo', tagline='Bar')
176     b.objects     # AttributeError: "Manager isn't accessible via Blog instances."
177
178 (``Managers`` are accessible only via model classes, rather than from model
179 instances, to enforce a separation between "table-level" operations and
180 "record-level" operations.)
181
182 The ``Manager`` is the main source of ``QuerySets`` for a model. It acts as a
183 "root" ``QuerySet`` that describes all objects in the model's database table.
184 For example, ``Blog.objects`` is the initial ``QuerySet`` that contains all
185 ``Blog`` objects in the database.
186
187 Retrieving all objects
188 ----------------------
189
190 The simplest way to retrieve objects from a table is to get all of them.
191 To do this, use the ``all()`` method on a ``Manager``.
192
193 Example::
194
195     all_entries = Entry.objects.all()
196
197 The ``all()`` method returns a ``QuerySet`` of all the objects in the database.
198
199 (If ``Entry.objects`` is a ``QuerySet``, why can't we just do ``Entry.objects``?
200 That's because ``Entry.objects``, the root ``QuerySet``, is a special case
201 that cannot be evaluated. The ``all()`` method returns a ``QuerySet`` that
202 *can* be evaluated.)
203
204 Filtering objects
205 -----------------
206
207 The root ``QuerySet`` provided by the ``Manager`` describes all objects in the
208 database table. Usually, though, you'll need to select only a subset of the
209 complete set of objects.
210
211 To create such a subset, you refine the initial ``QuerySet``, adding filter
212 conditions. The two most common ways to refine a ``QuerySet`` are:
213
214 ``filter(**kwargs)``
215     Returns a new ``QuerySet`` containing objects that match the given lookup
216     parameters.
217
218 ``exclude(**kwargs)``
219     Returns a new ``QuerySet`` containing objects that do *not* match the given
220     lookup parameters.
221
222 The lookup parameters (``**kwargs`` in the above function definitions) should
223 be in the format described in `Field lookups`_ below.
224
225 For example, to get a ``QuerySet`` of blog entries from the year 2006, use
226 ``filter()`` like so::
227
228     Entry.objects.filter(pub_date__year=2006)
229
230 (Note we don't have to add an ``all()`` -- ``Entry.objects.all().filter(...)``.
231 That would still work, but you only need ``all()`` when you want all objects
232 from the root ``QuerySet``.)
233
234 Chaining filters
235 ~~~~~~~~~~~~~~~~
236
237 The result of refining a ``QuerySet`` is itself a ``QuerySet``, so it's
238 possible to chain refinements together. For example::
239
240     Entry.objects.filter(
241         headline__startswith='What').exclude(
242             pub_date__gte=datetime.now()).filter(
243                 pub_date__gte=datetime(2005, 1, 1))
244
245 ...takes the initial ``QuerySet`` of all entries in the database, adds a
246 filter, then an exclusion, then another filter. The final result is a
247 ``QuerySet`` containing all entries with a headline that starts with "What",
248 that were published between January 1, 2005, and the current day.
249
250 Filtered QuerySets are unique
251 -----------------------------
252
253 Each time you refine a ``QuerySet``, you get a brand-new ``QuerySet`` that is
254 in no way bound to the previous ``QuerySet``. Each refinement creates a
255 separate and distinct ``QuerySet`` that can be stored, used and reused.
256
257 Example::
258
259     q1 = Entry.objects.filter(headline__startswith="What")
260     q2 = q1.exclude(pub_date__gte=datetime.now())
261     q3 = q1.filter(pub_date__gte=datetime.now())
262
263 These three ``QuerySets`` are separate. The first is a base ``QuerySet``
264 containing all entries that contain a headline starting with "What". The second
265 is a subset of the first, with an additional criteria that excludes records
266 whose ``pub_date`` is greater than now. The third is a subset of the first,
267 with an additional criteria that selects only the records whose ``pub_date`` is
268 greater than now. The initial ``QuerySet`` (``q1``) is unaffected by the
269 refinement process.
270
271 QuerySets are lazy
272 ------------------
273
274 ``QuerySets`` are lazy -- the act of creating a ``QuerySet`` doesn't involve
275 any database activity. You can stack filters together all day long, and Django
276 won't actually run the query until the ``QuerySet`` is *evaluated*.
277
278 When QuerySets are evaluated
279 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
280
281 You can evaluate a ``QuerySet`` in the following ways:
282
283     * **Iteration.** A ``QuerySet`` is iterable, and it executes its database
284       query the first time you iterate over it. For example, this will print
285       the headline of all entries in the database::
286
287           for e in Entry.objects.all():
288               print e.headline
289
290     * **Slicing.** As explained in `Limiting QuerySets`_ below, a ``QuerySet``
291       can be sliced, using Python's array-slicing syntax. Usually slicing a
292       ``QuerySet`` returns another (unevaluated )``QuerySet``, but Django will
293       execute the database query if you use the "step" parameter of slice
294       syntax.
295
296     * **repr().** A ``QuerySet`` is evaluated when you call ``repr()`` on it.
297       This is for convenience in the Python interactive interpreter, so you can
298       immediately see your results when using the API interactively.
299
300     * **len().** A ``QuerySet`` is evaluated when you call ``len()`` on it.
301       This, as you might expect, returns the length of the result list.
302
303       Note: *Don't* use ``len()`` on ``QuerySet``\s if all you want to do is
304       determine the number of records in the set. It's much more efficient to
305       handle a count at the database level, using SQL's ``SELECT COUNT(*)``,
306       and Django provides a ``count()`` method for precisely this reason. See
307       ``count()`` below.
308
309     * **list().** Force evaluation of a ``QuerySet`` by calling ``list()`` on
310       it. For example::
311
312           entry_list = list(Entry.objects.all())
313
314       Be warned, though, that this could have a large memory overhead, because
315       Django will load each element of the list into memory. In contrast,
316       iterating over a ``QuerySet`` will take advantage of your database to
317       load data and instantiate objects only as you need them.
318
319 Limiting QuerySets
320 ------------------
321
322 Use Python's array-slicing syntax to limit your ``QuerySet`` to a certain
323 number of results. This is the equivalent of SQL's ``LIMIT`` and ``OFFSET``
324 clauses.
325
326 For example, this returns the first 5 objects (``LIMIT 5``)::
327
328     Entry.objects.all()[:5]
329
330 This returns the fifth through tenth objects (``OFFSET 5 LIMIT 5``)::
331
332     Entry.objects.all()[5:10]
333
334 Generally, slicing a ``QuerySet`` returns a new ``QuerySet`` -- it doesn't
335 evaluate the query. An exception is if you use the "step" parameter of Python
336 slice syntax. For example, this would actually execute the query in order to
337 return a list of every *second* object of the first 10::
338
339     Entry.objects.all()[:10:2]
340
341 To retrieve a *single* object rather than a list
342 (e.g. ``SELECT foo FROM bar LIMIT 1``), use a simple index instead of a
343 slice. For example, this returns the first ``Entry`` in the database, after
344 ordering entries alphabetically by headline::
345
346     Entry.objects.order_by('headline')[0]
347
348 This is roughly equivalent to::
349
350     Entry.objects.order_by('headline')[0:1].get()
351
352 Note, however, that the first of these will raise ``IndexError`` while the
353 second will raise ``DoesNotExist`` if no objects match the given criteria.
354
355 QuerySet methods that return new QuerySets
356 ------------------------------------------
357
358 Django provides a range of ``QuerySet`` refinement methods that modify either
359 the types of results returned by the ``QuerySet`` or the way its SQL query is
360 executed.
361
362 ``filter(**kwargs)``
363 ~~~~~~~~~~~~~~~~~~~~
364
365 Returns a new ``QuerySet`` containing objects that match the given lookup
366 parameters.
367
368 The lookup parameters (``**kwargs``) should be in the format described in
369 `Field lookups`_ below. Multiple parameters are joined via ``AND`` in the
370 underlying SQL statement.
371
372 ``exclude(**kwargs)``
373 ~~~~~~~~~~~~~~~~~~~~~
374
375 Returns a new ``QuerySet`` containing objects that do *not* match the given
376 lookup parameters.
377
378 The lookup parameters (``**kwargs``) should be in the format described in
379 `Field lookups`_ below. Multiple parameters are joined via ``AND`` in the
380 underlying SQL statement, and the whole thing is enclosed in a ``NOT()``.
381
382 This example excludes all entries whose ``pub_date`` is the current date/time
383 AND whose ``headline`` is "Hello"::
384
385     Entry.objects.exclude(pub_date__gt=datetime.date(2005, 1, 3), headline='Hello')
386
387 In SQL terms, that evaluates to::
388
389     SELECT ...
390     WHERE NOT (pub_date > '2005-1-3' AND headline = 'Hello')
391
392 This example excludes all entries whose ``pub_date`` is the current date/time
393 OR whose ``headline`` is "Hello"::
394
395     Entry.objects.exclude(pub_date__gt=datetime.date(2005, 1, 3)).exclude(headline='Hello')
396
397 In SQL terms, that evaluates to::
398
399     SELECT ...
400     WHERE NOT pub_date > '2005-1-3'
401     AND NOT headline = 'Hello'
402
403 Note the second example is more restrictive.
404
405 ``order_by(*fields)``
406 ~~~~~~~~~~~~~~~~~~~~~
407
408 By default, results returned by a ``QuerySet`` are ordered by the ordering
409 tuple given by the ``ordering`` option in the model's ``Meta``. You can
410 override this on a per-``QuerySet`` basis by using the ``order_by`` method.
411
412 Example::
413
414     Entry.objects.filter(pub_date__year=2005).order_by('-pub_date', 'headline')
415
416 The result above will be ordered by ``pub_date`` descending, then by
417 ``headline`` ascending. The negative sign in front of ``"-pub_date"`` indicates
418 *descending* order. Ascending order is implied. To order randomly, use ``"?"``,
419 like so::
420
421     Entry.objects.order_by('?')
422
423 To order by a field in a different table, add the other table's name and a dot,
424 like so::
425
426     Entry.objects.order_by('blogs_blog.name', 'headline')
427
428 There's no way to specify whether ordering should be case sensitive. With
429 respect to case-sensitivity, Django will order results however your database
430 backend normally orders them.
431
432 ``distinct()``
433 ~~~~~~~~~~~~~~
434
435 Returns a new ``QuerySet`` that uses ``SELECT DISTINCT`` in its SQL query. This
436 eliminates duplicate rows from the query results.
437
438 By default, a ``QuerySet`` will not eliminate duplicate rows. In practice, this
439 is rarely a problem, because simple queries such as ``Blog.objects.all()``
440 don't introduce the possibility of duplicate result rows.
441
442 However, if your query spans multiple tables, it's possible to get duplicate
443 results when a ``QuerySet`` is evaluated. That's when you'd use ``distinct()``.
444
445 ``values(*fields)``
446 ~~~~~~~~~~~~~~~~~~~
447
448 Returns a ``ValuesQuerySet`` -- a ``QuerySet`` that evaluates to a list of
449 dictionaries instead of model-instance objects.
450
451 Each of those dictionaries represents an object, with the keys corresponding to
452 the attribute names of model objects.
453
454 This example compares the dictionaries of ``values()`` with the normal model
455 objects::
456
457     # This list contains a Blog object.
458     >>> Blog.objects.filter(name__startswith='Beatles')
459     [Beatles Blog]
460
461     # This list contains a dictionary.
462     >>> Blog.objects.filter(name__startswith='Beatles').values()
463     [{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}]
464
465 ``values()`` takes optional positional arguments, ``*fields``, which specify
466 field names to which the ``SELECT`` should be limited. If you specify the
467 fields, each dictionary will contain only the field keys/values for the fields
468 you specify. If you don't specify the fields, each dictionary will contain a
469 key and value for every field in the database table.
470
471 Example::
472
473     >>> Blog.objects.values()
474     [{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}],
475     >>> Blog.objects.values('id', 'name')
476     [{'id': 1, 'name': 'Beatles Blog'}]
477
478 A ``ValuesQuerySet`` is useful when you know you're only going to need values
479 from a small number of the available fields and you won't need the
480 functionality of a model instance object. It's more efficient to select only
481 the fields you need to use.
482
483 Finally, note a ``ValuesQuerySet`` is a subclass of ``QuerySet``, so it has all
484 methods of ``QuerySet``. You can call ``filter()`` on it, or ``order_by()``, or
485 whatever. Yes, that means these two calls are identical::
486
487     Blog.objects.values().order_by('id')
488     Blog.objects.order_by('id').values()
489
490 The people who made Django prefer to put all the SQL-affecting methods first,
491 followed (optionally) by any output-affecting methods (such as ``values()``),
492 but it doesn't really matter. This is your chance to really flaunt your
493 individualism.
494
495 ``dates(field, kind, order='ASC')``
496 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
497
498 Returns a ``DateQuerySet`` -- a ``QuerySet`` that evaluates to a list of
499 ``datetime.datetime`` objects representing all available dates of a particular
500 kind within the contents of the ``QuerySet``.
501
502 ``field`` should be the name of a ``DateField`` or ``DateTimeField`` of your
503 model.
504
505 ``kind`` should be either ``"year"``, ``"month"`` or ``"day"``. Each
506 ``datetime.datetime`` object in the result list is "truncated" to the given
507 ``type``.
508
509     * ``"year"`` returns a list of all distinct year values for the field.
510     * ``"month"`` returns a list of all distinct year/month values for the field.
511     * ``"day"`` returns a list of all distinct year/month/day values for the field.
512
513 ``order``, which defaults to ``'ASC'``, should be either ``'ASC'`` or
514 ``'DESC'``. This specifies how to order the results.
515
516 Examples::
517
518     >>> Entry.objects.dates('pub_date', 'year')
519     [datetime.datetime(2005, 1, 1)]
520     >>> Entry.objects.dates('pub_date', 'month')
521     [datetime.datetime(2005, 2, 1), datetime.datetime(2005, 3, 1)]
522     >>> Entry.objects.dates('pub_date', 'day')
523     [datetime.datetime(2005, 2, 20), datetime.datetime(2005, 3, 20)]
524     >>> Entry.objects.dates('pub_date', 'day', order='DESC')
525     [datetime.datetime(2005, 3, 20), datetime.datetime(2005, 2, 20)]
526     >>> Entry.objects.filter(headline__contains='Lennon').dates('pub_date', 'day')
527     [datetime.datetime(2005, 3, 20)]
528
529 ``select_related()``
530 ~~~~~~~~~~~~~~~~~~~~
531
532 Returns a ``QuerySet`` that will automatically "follow" foreign-key
533 relationships, selecting that additional related-object data when it executes
534 its query. This is a performance booster which results in (sometimes much)
535 larger queries but means later use of foreign-key relationships won't require
536 database queries.
537
538 The following examples illustrate the difference between plain lookups and
539 ``select_related()`` lookups. Here's standard lookup::
540
541     # Hits the database.
542     e = Entry.objects.get(id=5)
543
544     # Hits the database again to get the related Blog object.
545     b = e.blog
546
547 And here's ``select_related`` lookup::
548
549     # Hits the database.
550     e = Entry.objects.select_related().get(id=5)
551
552     # Doesn't hit the database, because e.blog has been prepopulated
553     # in the previous query.
554     b = e.blog
555
556 ``select_related()`` follows foreign keys as far as possible. If you have the
557 following models::
558
559     class City(models.Model):
560         # ...
561
562     class Person(models.Model):
563         # ...
564         hometown = models.ForeignKey(City)
565
566     class Book(models.Model):
567         # ...
568         author = models.ForeignKey(Person)
569
570 ...then a call to ``Book.objects.select_related().get(id=4)`` will cache the
571 related ``Person`` *and* the related ``City``::
572
573     b = Book.objects.select_related().get(id=4)
574     p = b.author         # Doesn't hit the database.
575     c = p.hometown       # Doesn't hit the database.
576
577     sv = Book.objects.get(id=4) # No select_related() in this example.
578     p = b.author         # Hits the database.
579     c = p.hometown       # Hits the database.
580
581 Note that ``select_related()`` does not follow foreign keys that have
582 ``null=True``.
583
584 ``extra(select=None, where=None, params=None, tables=None)``
585 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
586
587 Sometimes, the Django query syntax by itself can't easily express a complex
588 ``WHERE`` clause. For these edge cases, Django provides the ``extra()``
589 ``QuerySet`` modifier -- a hook for injecting specific clauses into the SQL
590 generated by a ``QuerySet``.
591
592 By definition, these extra lookups may not be portable to different database
593 engines (because you're explicitly writing SQL code) and violate the DRY
594 principle, so you should avoid them if possible.
595
596 Specify one or more of ``params``, ``select``, ``where`` or ``tables``. None
597 of the arguments is required, but you should use at least one of them.
598
599 ``select``
600     The ``select`` argument lets you put extra fields in the ``SELECT`` clause.
601     It should be a dictionary mapping attribute names to SQL clauses to use to
602     calculate that attribute.
603
604     Example::
605
606         Entry.objects.extra(select={'is_recent': "pub_date > '2006-01-01'"})
607
608     As a result, each ``Entry`` object will have an extra attribute,
609     ``is_recent``, a boolean representing whether the entry's ``pub_date`` is
610     greater than Jan. 1, 2006.
611
612     Django inserts the given SQL snippet directly into the ``SELECT``
613     statement, so the resulting SQL of the above example would be::
614
615         SELECT blog_entry.*, (pub_date > '2006-01-01')
616         FROM blog_entry;
617
618
619     The next example is more advanced; it does a subquery to give each
620     resulting ``Blog`` object an ``entry_count`` attribute, an integer count
621     of associated ``Entry`` objects::
622
623         Blog.objects.extra(
624             select={
625                 'entry_count': 'SELECT COUNT(*) FROM blog_entry WHERE blog_entry.blog_id = blog_blog.id'
626             },
627         )
628
629     (In this particular case, we're exploiting the fact that the query will
630     already contain the ``blog_blog`` table in its ``FROM`` clause.)
631
632     The resulting SQL of the above example would be::
633
634         SELECT blog_blog.*, (SELECT COUNT(*) FROM blog_entry WHERE blog_entry.blog_id = blog_blog.id)
635         FROM blog_blog;
636
637     Note that the parenthesis required by most database engines around
638     subqueries are not required in Django's ``select`` clauses. Also note that
639     some database backends, such as some MySQL versions, don't support
640     subqueries.
641
642 ``where`` / ``tables``
643     You can define explicit SQL ``WHERE`` clauses -- perhaps to perform
644     non-explicit joins -- by using ``where``. You can manually add tables to
645     the SQL ``FROM`` clause by using ``tables``.
646
647     ``where`` and ``tables`` both take a list of strings. All ``where``
648     parameters are "AND"ed to any other search criteria.
649
650     Example::
651
652         Entry.objects.extra(where=['id IN (3, 4, 5, 20)'])
653
654     ...translates (roughly) into the following SQL::
655
656         SELECT * FROM blog_entry WHERE id IN (3, 4, 5, 20);
657
658 ``params``
659     The ``select`` and ``where`` parameters described above may use standard
660     Python database string placeholders -- ``'%s'`` to indicate parameters the
661     database engine should automatically quote. The ``params`` argument is a
662     list of any extra parameters to be substituted.
663
664     Example::
665
666         Entry.objects.extra(where=['headline=%s'], params=['Lennon'])
667
668     Always use ``params`` instead of embedding values directly into ``select``
669     or ``where`` because ``params`` will ensure values are quoted correctly
670     according to your particular backend. (For example, quotes will be escaped
671     correctly.)
672
673     Bad::
674
675         Entry.objects.extra(where=["headline='Lennon'"])
676
677     Good::
678
679         Entry.objects.extra(where=['headline=%s'], params=['Lennon'])
680
681 QuerySet methods that do not return QuerySets
682 ---------------------------------------------
683
684 The following ``QuerySet`` methods evaluate the ``QuerySet`` and return
685 something *other than* a ``QuerySet``.
686
687 These methods do not use a cache (see _`Caching and QuerySets` below). Rather,
688 they query the database each time they're called.
689
690 ``get(**kwargs)``
691 ~~~~~~~~~~~~~~~~~
692
693 Returns the object matching the given lookup parameters, which should be in
694 the format described in `Field lookups`_.
695
696 ``get()`` raises ``AssertionError`` if more than one object was found.
697
698 ``get()`` raises a ``DoesNotExist`` exception if an object wasn't found for the
699 given parameters. The ``DoesNotExist`` exception is an attribute of the model
700 class. Example::
701
702     Entry.objects.get(id='foo') # raises Entry.DoesNotExist
703
704 The ``DoesNotExist`` exception inherits from
705 ``django.core.exceptions.ObjectDoesNotExist``, so you can target multiple
706 ``DoesNotExist`` exceptions. Example::
707
708     from django.core.exceptions import ObjectDoesNotExist
709     try:
710         e = Entry.objects.get(id=3)
711         b = Blog.objects.get(id=1)
712     except ObjectDoesNotExist:
713         print "Either the entry or blog doesn't exist."
714
715 ``create(**kwargs)``
716 ~~~~~~~~~~~~~~~~~~~~
717
718 A convenience method for creating an object and saving it all in one step.  Thus::
719
720     p = Person.objects.create(first_name="Bruce", last_name="Springsteen")
721
722 and::
723
724     p = Person(first_name="Bruce", last_name="Springsteen")
725     p.save()
726
727 are equivalent.
728
729 ``get_or_create(**kwargs)``
730 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
731
732 A convenience method for looking up an object with the given kwargs, creating
733 one if necessary.
734
735 Returns a tuple of ``(object, created)``, where ``object`` is the retrieved or
736 created object and ``created`` is a boolean specifying whether a new object was
737 created.
738
739 This is meant as a shortcut to boilerplatish code and is mostly useful for
740 data-import scripts. For example::
741
742     try:
743         obj = Person.objects.get(first_name='John', last_name='Lennon')
744     except Person.DoesNotExist:
745         obj = Person(first_name='John', last_name='Lennon', birthday=date(1940, 10, 9))
746         obj.save()
747
748 This pattern gets quite unwieldy as the number of fields in a model goes up.
749 The above example can be rewritten using ``get_or_create()`` like so::
750
751     obj, created = Person.objects.get_or_create(first_name='John', last_name='Lennon',
752                       defaults={'birthday': date(1940, 10, 9)})
753
754 Any keyword arguments passed to ``get_or_create()`` -- *except* an optional one
755 called ``defaults`` -- will be used in a ``get()`` call. If an object is found,
756 ``get_or_create()`` returns a tuple of that object and ``False``. If an object
757 is *not* found, ``get_or_create()`` will instantiate and save a new object,
758 returning a tuple of the new object and ``True``. The new object will be
759 created according to this algorithm::
760
761     defaults = kwargs.pop('defaults', {})
762     params = dict([(k, v) for k, v in kwargs.items() if '__' not in k])
763     params.update(defaults)
764     obj = self.model(**params)
765     obj.save()
766
767 In English, that means start with any non-``'defaults'`` keyword argument that
768 doesn't contain a double underscore (which would indicate a non-exact lookup).
769 Then add the contents of ``defaults``, overriding any keys if necessary, and
770 use the result as the keyword arguments to the model class.
771
772 If you have a field named ``defaults`` and want to use it as an exact lookup in
773 ``get_or_create()``, just use ``'defaults__exact'``, like so::
774
775     Foo.objects.get_or_create(defaults__exact='bar', defaults={'defaults': 'baz'})
776
777 Finally, a word on using ``get_or_create()`` in Django views. As mentioned
778 earlier, ``get_or_create()`` is mostly useful in scripts that need to parse
779 data and create new records if existing ones aren't available. But if you need
780 to use ``get_or_create()`` in a view, please make sure to use it only in
781 ``POST`` requests unless you have a good reason not to. ``GET`` requests
782 shouldn't have any effect on data; use ``POST`` whenever a request to a page
783 has a side effect on your data. For more, see `Safe methods`_ in the HTTP spec.
784
785 .. _Safe methods: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.1
786
787 ``count()``
788 ~~~~~~~~~~~
789
790 Returns an integer representing the number of objects in the database matching
791 the ``QuerySet``. ``count()`` never raises exceptions.
792
793 Example::
794
795     # Returns the total number of entries in the database.
796     Entry.objects.count()
797
798     # Returns the number of entries whose headline contains 'Lennon'
799     Entry.objects.filter(headline__contains='Lennon').count()
800
801 ``count()`` performs a ``SELECT COUNT(*)`` behind the scenes, so you should
802 always use ``count()`` rather than loading all of the record into Python
803 objects and calling ``len()`` on the result.
804
805 Depending on which database you're using (e.g. PostgreSQL vs. MySQL),
806 ``count()`` may return a long integer instead of a normal Python integer. This
807 is an underlying implementation quirk that shouldn't pose any real-world
808 problems.
809
810 ``in_bulk(id_list)``
811 ~~~~~~~~~~~~~~~~~~~~
812
813 Takes a list of primary-key values and returns a dictionary mapping each
814 primary-key value to an instance of the object with the given ID.
815
816 Example::
817
818     >>> Blog.objects.in_bulk([1])
819     {1: Beatles Blog}
820     >>> Blog.objects.in_bulk([1, 2])
821     {1: Beatles Blog, 2: Cheddar Talk}
822     >>> Blog.objects.in_bulk([])
823     {}
824
825 If you pass ``in_bulk()`` an empty list, you'll get an empty dictionary.
826
827 ``latest(field_name=None)``
828 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
829
830 Returns the latest object in the table, by date, using the ``field_name``
831 provided as the date field.
832
833 This example returns the latest ``Entry`` in the table, according to the
834 ``pub_date`` field::
835
836     Entry.objects.latest('pub_date')
837
838 If your model's ``Meta`` specifies ``get_latest_by``, you can leave off the
839 ``field_name`` argument to ``latest()``. Django will use the field specified in
840 ``get_latest_by`` by default.
841
842 Like ``get()``, ``latest()`` raises ``DoesNotExist`` if an object doesn't
843 exist with the given parameters.
844
845 Note ``latest()`` exists purely for convenience and readability.
846
847 Field lookups
848 -------------
849
850 Field lookups are how you specify the meat of an SQL ``WHERE`` clause. They're
851 specified as keyword arguments to the ``QuerySet`` methods ``filter()``,
852 ``exclude()`` and ``get()``.
853
854 Basic lookups keyword arguments take the form ``field__lookuptype=value``.
855 (That's a double-underscore). For example::
856
857     Entry.objects.filter(pub_date__lte='2006-01-01')
858
859 translates (roughly) into the following SQL::
860
861     SELECT * FROM blog_entry WHERE pub_date <= '2006-01-01';
862
863 .. admonition:: How this is possible
864
865    Python has the ability to define functions that accept arbitrary name-value
866    arguments whose names and values are evaluated at runtime. For more
867    information, see `Keyword Arguments`_ in the official Python tutorial.
868
869    .. _`Keyword Arguments`: http://docs.python.org/tut/node6.html#SECTION006720000000000000000
870
871 If you pass an invalid keyword argument, a lookup function will raise
872 ``TypeError``.
873
874 The database API supports the following lookup types:
875
876 exact
877 ~~~~~
878
879 Exact match. If the value provided for comparison is ``None``, it will
880 be interpreted as an SQL ``NULL`` (See isnull_ for more details). 
881
882 Examples::
883
884     Entry.objects.get(id__exact=14)
885     Entry.objects.get(id__exact=None)
886
887 SQL equivalents::
888
889     SELECT ... WHERE id = 14;
890     SELECT ... WHERE id = NULL;
891
892 iexact
893 ~~~~~~
894
895 Case-insensitive exact match.
896
897 Example::
898
899     Blog.objects.get(name__iexact='beatles blog')
900
901 SQL equivalent::
902
903     SELECT ... WHERE name ILIKE 'beatles blog';
904
905 Note this will match ``'Beatles Blog'``, ``'beatles blog'``,
906 ``'BeAtLes BLoG'``, etc.
907
908 contains
909 ~~~~~~~~
910
911 Case-sensitive containment test.
912
913 Example::
914
915     Entry.objects.get(headline__contains='Lennon')
916
917 SQL equivalent::
918
919     SELECT ... WHERE headline LIKE '%Lennon%';
920
921 Note this will match the headline ``'Today Lennon honored'`` but not
922 ``'today lennon honored'``.
923
924 SQLite doesn't support case-sensitive ``LIKE`` statements; ``contains`` acts
925 like ``icontains`` for SQLite.
926
927 icontains
928 ~~~~~~~~~
929
930 Case-insensitive containment test.
931
932 Example::
933
934     Entry.objects.get(headline__icontains='Lennon')
935
936 SQL equivalent::
937
938     SELECT ... WHERE headline ILIKE '%Lennon%';
939
940 gt
941 ~~
942
943 Greater than.
944
945 Example::
946
947     Entry.objects.filter(id__gt=4)
948
949 SQL equivalent::
950
951     SELECT ... WHERE id > 4;
952
953 gte
954 ~~~
955
956 Greater than or equal to.
957
958 lt
959 ~~
960
961 Less than.
962
963 lte
964 ~~~
965
966 Less than or equal to.
967
968 in
969 ~~
970
971 In a given list.
972
973 Example::
974
975     Entry.objects.filter(id__in=[1, 3, 4])
976
977 SQL equivalent::
978
979     SELECT ... WHERE id IN (1, 3, 4);
980
981 startswith
982 ~~~~~~~~~~
983
984 Case-sensitive starts-with.
985
986 Example::
987
988     Entry.objects.filter(headline__startswith='Will')
989
990 SQL equivalent::
991
992     SELECT ... WHERE headline LIKE 'Will%';
993
994 SQLite doesn't support case-sensitive ``LIKE`` statements; ``startswith`` acts
995 like ``istartswith`` for SQLite.
996
997 istartswith
998 ~~~~~~~~~~~
999
1000 Case-insensitive starts-with.
1001
1002 Example::
1003
1004     Entry.objects.filter(headline__istartswith='will')
1005
1006 SQL equivalent::
1007
1008     SELECT ... WHERE headline ILIKE 'Will%';
1009
1010 endswith
1011 ~~~~~~~~
1012
1013 Case-sensitive ends-with.
1014
1015 Example::
1016
1017     Entry.objects.filter(headline__endswith='cats')
1018
1019 SQL equivalent::
1020
1021     SELECT ... WHERE headline LIKE '%cats';
1022
1023 SQLite doesn't support case-sensitive ``LIKE`` statements; ``endswith`` acts
1024 like ``iendswith`` for SQLite.
1025
1026 iendswith
1027 ~~~~~~~~~
1028
1029 Case-insensitive ends-with.
1030
1031 Example::
1032
1033     Entry.objects.filter(headline__iendswith='will')
1034
1035 SQL equivalent::
1036
1037     SELECT ... WHERE headline ILIKE '%will'
1038
1039 range
1040 ~~~~~
1041
1042 Range test (inclusive).
1043
1044 Example::
1045
1046     start_date = datetime.date(2005, 1, 1)
1047     end_date = datetime.date(2005, 3, 31)
1048     Entry.objects.filter(pub_date__range=(start_date, end_date))
1049
1050 SQL equivalent::
1051
1052     SELECT ... WHERE pub_date BETWEEN '2005-01-01' and '2005-03-31';
1053
1054 You can use ``range`` anywhere you can use ``BETWEEN`` in SQL -- for dates,
1055 numbers and even characters.
1056
1057 year
1058 ~~~~
1059
1060 For date/datetime fields, exact year match. Takes a four-digit year.
1061
1062 Example::
1063
1064     Entry.objects.filter(pub_date__year=2005)
1065
1066 SQL equivalent::
1067
1068     SELECT ... WHERE EXTRACT('year' FROM pub_date) = '2005';
1069
1070 (The exact SQL syntax varies for each database engine.)
1071
1072 month
1073 ~~~~~
1074
1075 For date/datetime fields, exact month match. Takes an integer 1 (January)
1076 through 12 (December).
1077
1078 Example::
1079
1080     Entry.objects.filter(pub_date__month=12)
1081
1082 SQL equivalent::
1083
1084     SELECT ... WHERE EXTRACT('month' FROM pub_date) = '12';
1085
1086 (The exact SQL syntax varies for each database engine.)
1087
1088 day
1089 ~~~
1090
1091 For date/datetime fields, exact day match.
1092
1093 Example::
1094
1095     Entry.objects.filter(pub_date__day=3)
1096
1097 SQL equivalent::
1098
1099     SELECT ... WHERE EXTRACT('day' FROM pub_date) = '3';
1100
1101 (The exact SQL syntax varies for each database engine.)
1102
1103 Note this will match any record with a pub_date on the third day of the month,
1104 such as January 3, July 3, etc.
1105
1106 isnull
1107 ~~~~~~
1108
1109 Takes either ``True`` or ``False``, which correspond to SQL queries of
1110 ``IS NULL`` and ``IS NOT NULL``, respectively.
1111
1112 Example::
1113
1114     Entry.objects.filter(pub_date__isnull=True)
1115
1116 SQL equivalent::
1117
1118     SELECT ... WHERE pub_date IS NULL;
1119
1120 .. admonition:: ``__isnull=True`` vs ``__exact=None``
1121
1122     There is an important difference between ``__isnull=True`` and
1123     ``__exact=None``. ``__exact=None`` will *always* return an empty result
1124     set, because SQL requires that no value is equal to ``NULL``.
1125     ``__isnull`` determines if the field is currently holding the value
1126     of ``NULL`` without performing a comparison.
1127
1128 search
1129 ~~~~~~
1130
1131 A boolean full-text search, taking advantage of full-text indexing. This is
1132 like ``contains`` but is significantly faster due to full-text indexing.
1133
1134 Note this is only available in MySQL and requires direct manipulation of the
1135 database to add the full-text index.
1136
1137 Default lookups are exact
1138 -------------------------
1139
1140 If you don't provide a lookup type -- that is, if your keyword argument doesn't
1141 contain a double underscore -- the lookup type is assumed to be ``exact``.
1142
1143 For example, the following two statements are equivalent::
1144
1145     Blog.objects.get(id__exact=14) # Explicit form
1146     Blog.objects.get(id=14) # __exact is implied
1147
1148 This is for convenience, because ``exact`` lookups are the common case.
1149
1150 The pk lookup shortcut
1151 ----------------------
1152
1153 For convenience, Django provides a ``pk`` lookup type, which stands for
1154 "primary_key".
1155
1156 In the example ``Blog`` model, the primary key is the ``id`` field, so these
1157 three statements are equivalent::
1158
1159     Blog.objects.get(id__exact=14) # Explicit form
1160     Blog.objects.get(id=14) # __exact is implied
1161     Blog.objects.get(pk=14) # pk implies id__exact
1162
1163 The use of ``pk`` isn't limited to ``__exact`` queries -- any query term
1164 can be combined with ``pk`` to perform a query on the primary key of a model::
1165
1166     # Get blogs entries  with id 1, 4 and 7
1167     Blog.objects.filter(pk__in=[1,4,7])
1168     # Get all blog entries with id > 14
1169     Blog.objects.filter(pk__gt=14)
1170    
1171 ``pk`` lookups also work across joins. For example, these three statements are
1172 equivalent::
1173
1174     Entry.objects.filter(blog__id__exact=3) # Explicit form
1175     Entry.objects.filter(blog__id=3) # __exact is implied
1176     Entry.objects.filter(blog__pk=3) # __pk implies __id__exact
1177
1178 Lookups that span relationships
1179 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1180
1181 Django offers a powerful and intuitive way to "follow" relationships in
1182 lookups, taking care of the SQL ``JOIN``\s for you automatically, behind the
1183 scenes. To span a relationship, just use the field name of related fields
1184 across models, separated by double underscores, until you get to the field you
1185 want.
1186
1187 This example retrieves all ``Entry`` objects with a ``Blog`` whose ``name``
1188 is ``'Beatles Blog'``::
1189
1190     Entry.objects.filter(blog__name__exact='Beatles Blog')
1191
1192 This spanning can be as deep as you'd like.
1193
1194 It works backwards, too. To refer to a "reverse" relationship, just use the
1195 lowercase name of the model.
1196
1197 This example retrieves all ``Blog`` objects which have at least one ``Entry``
1198 whose ``headline`` contains ``'Lennon'``::
1199
1200     Blog.objects.filter(entry__headline__contains='Lennon')
1201
1202 Escaping parenthesis and underscores in LIKE statements
1203 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1204
1205 The field lookups that equate to ``LIKE`` SQL statements (``iexact``,
1206 ``contains``, ``icontains``, ``startswith``, ``istartswith``, ``endswith``
1207 and ``iendswith``) will automatically escape the two special characters used in
1208 ``LIKE`` statements -- the percent sign and the underscore. (In a ``LIKE``
1209 statement, the percent sign signifies a multiple-character wildcard and the
1210 underscore signifies a single-character wildcard.)
1211
1212 This means things should work intuitively, so the abstraction doesn't leak.
1213 For example, to retrieve all the entries that contain a percent sign, just use
1214 the percent sign as any other character::
1215
1216     Entry.objects.filter(headline__contains='%')
1217
1218 Django takes care of the quoting for you; the re