Index: django/db/models/sql/where.py
===================================================================
--- django/db/models/sql/where.py	(revision 8442)
+++ django/db/models/sql/where.py	(working copy)
@@ -162,7 +162,7 @@
                     params)
         elif lookup_type in ('range', 'year'):
             return ('%s BETWEEN %%s and %%s' % field_sql, params)
-        elif lookup_type in ('month', 'day'):
+        elif lookup_type in ('month', 'day', 'hour', 'minute', 'second'):
             return ('%s = %%s' % connection.ops.date_extract_sql(lookup_type,
                     field_sql), params)
         elif lookup_type == 'isnull':
Index: django/db/models/sql/constants.py
===================================================================
--- django/db/models/sql/constants.py	(revision 8442)
+++ django/db/models/sql/constants.py	(working copy)
@@ -4,7 +4,8 @@
 QUERY_TERMS = dict([(x, None) for x in (
     'exact', 'iexact', 'contains', 'icontains', 'gt', 'gte', 'lt', 'lte', 'in',
     'startswith', 'istartswith', 'endswith', 'iendswith', 'range', 'year',
-    'month', 'day', 'isnull', 'search', 'regex', 'iregex',
+    'month', 'day', 'hour', 'minute', 'second', 'isnull', 'search', 'regex',
+    'iregex',
     )])
 
 # Size of each "chunk" for get_iterator calls.
Index: django/db/models/fields/__init__.py
===================================================================
--- django/db/models/fields/__init__.py	(revision 8442)
+++ django/db/models/fields/__init__.py	(working copy)
@@ -208,7 +208,8 @@
         if hasattr(value, 'as_sql'):
             sql, params = value.as_sql()
             return QueryWrapper(('(%s)' % sql), params)
-        if lookup_type in ('regex', 'iregex', 'month', 'day', 'search'):
+        if lookup_type in ('regex', 'iregex', 'month', 'day', 'hour',
+                           'minute', 'second', 'search'):
             return [value]
         elif lookup_type in ('exact', 'gt', 'gte', 'lt', 'lte'):
             return [self.get_db_prep_value(value)]
Index: tests/modeltests/basic/models.py
===================================================================
--- tests/modeltests/basic/models.py	(revision 8442)
+++ tests/modeltests/basic/models.py	(working copy)
@@ -75,6 +75,7 @@
 >>> Article.objects.get(pub_date__year=2005, pub_date__month=7, pub_date__day=28)
 <Article: Area woman programs in Python>
 
+
 # The "__exact" lookup type can be omitted, as a shortcut.
 >>> Article.objects.get(id=1)
 <Article: Area woman programs in Python>
@@ -88,6 +89,21 @@
 >>> Article.objects.filter(pub_date__year=2005, pub_date__month=7)
 [<Article: Area woman programs in Python>]
 
+>>> Article.objects.filter(pub_date__hour=0)
+[<Article: Area woman programs in Python>]
+>>> Article.objects.filter(pub_date__hour=1)
+[]
+
+>>> Article.objects.filter(pub_date__minute=0)
+[<Article: Area woman programs in Python>]
+>>> Article.objects.filter(pub_date__minute=1)
+[]
+
+>>> Article.objects.filter(pub_date__second=0)
+[<Article: Area woman programs in Python>]
+>>> Article.objects.filter(pub_date__second=1)
+[]
+
 # Django raises an Article.DoesNotExist exception for get() if the parameters
 # don't match any object.
 >>> Article.objects.get(id__exact=2)
Index: docs/db-api.txt
===================================================================
--- docs/db-api.txt	(revision 8442)
+++ docs/db-api.txt	(working copy)
@@ -1580,6 +1580,60 @@
 Note this will match any record with a pub_date on the third day of the month,
 such as January 3, July 3, etc.
 
+hour
+~~~~
+
+For date/datetime fields, exact hour match.
+
+Example::
+
+    Entry.objects.filter(pub_date__hour=3)
+
+SQL equivalent::
+
+    SELECT ... WHERE EXTRACT('hour' FROM pub_date) = '3';
+
+(The exact SQL syntax varies for each database engine.)
+
+This will match every record with a pub_date that occurred between
+3:00 AM and 3:59 AM.
+
+minute
+~~~~
+
+For date/datetime fields, exact minute match.
+
+Example::
+
+    Entry.objects.filter(pub_date__minute=30)
+
+SQL equivalent::
+
+    SELECT ... WHERE EXTRACT('minute' FROM pub_date) = '30';
+
+(The exact SQL syntax varies for each database engine.)
+
+This will match every record with a pub_date that occurred at the 30th
+minute of any hour, such as 8:30 AM or 11:30 PM.
+
+second
+~~~~
+
+For date/datetime fields, exact second match.
+
+Example::
+
+    Entry.objects.filter(pub_date__second=0)
+
+SQL equivalent::
+
+    SELECT ... WHERE EXTRACT('second' FROM pub_date) = '0';
+
+(The exact SQL syntax varies for each database engine.)
+
+This will match every record with a pub_date that occurred at the 0th
+second of any minute.
+
 isnull
 ~~~~~~
 
