Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Fixed #8354: the MySQL backend no longer raises a cryptic error. Inst…

…ead, it raises a less-cryptic error. Obiously this isn't a perfect solution by any means, but it'll do until we can revisit timezone handling in the future.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@8802 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit e545058ba94f5f5736a5db82e6ba5883d8071485 1 parent 1520629
@jacobian jacobian authored
View
14 django/db/backends/mysql/base.py
@@ -172,15 +172,25 @@ def sql_flush(self, style, tables, sequences):
return []
def value_to_db_datetime(self, value):
- # MySQL doesn't support microseconds
if value is None:
return None
+
+ # MySQL doesn't support tz-aware datetimes
+ if value.tzinfo is not None:
+ raise ValueError("MySQL backend does not support timezone-aware datetimes.")
+
+ # MySQL doesn't support microseconds
return unicode(value.replace(microsecond=0))
def value_to_db_time(self, value):
- # MySQL doesn't support microseconds
if value is None:
return None
+
+ # MySQL doesn't support tz-aware datetimes
+ if value.tzinfo is not None:
+ raise ValueError("MySQL backend does not support timezone-aware datetimes.")
+
+ # MySQL doesn't support microseconds
return unicode(value.replace(microsecond=0))
def year_lookup_bounds(self, value):
View
13 tests/regressiontests/datatypes/models.py
@@ -83,3 +83,16 @@ def __str__(self):
[]
"""}
+
+# Regression test for #8354: the MySQL backend should raise an error if given
+# a timezone-aware datetime object.
+if settings.DATABASE_ENGINE == 'mysql':
+ __test__['API_TESTS'] += """
+>>> from django.utils import tzinfo
+>>> dt = datetime.datetime(2008, 8, 31, 16, 20, tzinfo=tzinfo.FixedOffset(0))
+>>> d = Donut(name='Bear claw', consumed_at=dt)
+>>> d.save()
+Traceback (most recent call last):
+ ....
+ValueError: MySQL backend does not support timezone-aware datetimes.
+"""
Please sign in to comment.
Something went wrong with that request. Please try again.