Loading django/db/backends/mysql/operations.py +7 −1 Original line number Diff line number Diff line Loading @@ -77,7 +77,10 @@ class DatabaseOperations(BaseDatabaseOperations): timedelta.days, timedelta.seconds, timedelta.microseconds), [] def format_for_duration_arithmetic(self, sql): if self.connection.features.supports_microsecond_precision: return 'INTERVAL %s MICROSECOND' % sql else: return 'INTERVAL FLOOR(%s / 1000000) SECOND' % sql def drop_foreignkey_sql(self): return "DROP FOREIGN KEY" Loading Loading @@ -146,6 +149,9 @@ class DatabaseOperations(BaseDatabaseOperations): else: raise ValueError("MySQL backend does not support timezone-aware datetimes when USE_TZ is False.") if not self.connection.features.supports_microsecond_precision: value = value.replace(microsecond=0) return six.text_type(value) def value_to_db_time(self, value): Loading docs/releases/1.8.1.txt +4 −0 Original line number Diff line number Diff line Loading @@ -21,3 +21,7 @@ Bugfixes * Fixed :djadmin:`squashmigrations` command when using :class:`~django.db.migrations.operations.SeparateDatabaseAndState` (:ticket:`24278`). * Stripped microseconds from ``datetime`` values when using an older version of the MySQLdb DB API driver as it does not support fractional seconds (:ticket:`24584`). tests/basic/tests.py +19 −4 Original line number Diff line number Diff line Loading @@ -192,15 +192,30 @@ class ModelTest(TestCase): @skipIfDBFeature('supports_microsecond_precision') def test_microsecond_precision_not_supported(self): # In MySQL, microsecond-level precision isn't available. You'll lose # microsecond-level precision once the data is saved. # In MySQL, microsecond-level precision isn't always available. You'll # lose microsecond-level precision once the data is saved. a9 = Article( headline='Article 9', pub_date=datetime(2005, 7, 31, 12, 30, 45, 180), ) a9.save() self.assertEqual(Article.objects.get(id__exact=a9.id).pub_date, datetime(2005, 7, 31, 12, 30, 45)) self.assertEqual( Article.objects.get(id__exact=a9.id).pub_date, datetime(2005, 7, 31, 12, 30, 45), ) @skipIfDBFeature('supports_microsecond_precision') def test_microsecond_precision_not_supported_edge_case(self): # In MySQL, microsecond-level precision isn't always available. You'll # lose microsecond-level precision once the data is saved. a = Article.objects.create( headline='Article', pub_date=datetime(2008, 12, 31, 23, 59, 59, 999999), ) self.assertEqual( Article.objects.get(pk=a.pk).pub_date, datetime(2008, 12, 31, 23, 59, 59), ) def test_manually_specify_primary_key(self): # You can manually specify the primary key when creating a new object. Loading Loading
django/db/backends/mysql/operations.py +7 −1 Original line number Diff line number Diff line Loading @@ -77,7 +77,10 @@ class DatabaseOperations(BaseDatabaseOperations): timedelta.days, timedelta.seconds, timedelta.microseconds), [] def format_for_duration_arithmetic(self, sql): if self.connection.features.supports_microsecond_precision: return 'INTERVAL %s MICROSECOND' % sql else: return 'INTERVAL FLOOR(%s / 1000000) SECOND' % sql def drop_foreignkey_sql(self): return "DROP FOREIGN KEY" Loading Loading @@ -146,6 +149,9 @@ class DatabaseOperations(BaseDatabaseOperations): else: raise ValueError("MySQL backend does not support timezone-aware datetimes when USE_TZ is False.") if not self.connection.features.supports_microsecond_precision: value = value.replace(microsecond=0) return six.text_type(value) def value_to_db_time(self, value): Loading
docs/releases/1.8.1.txt +4 −0 Original line number Diff line number Diff line Loading @@ -21,3 +21,7 @@ Bugfixes * Fixed :djadmin:`squashmigrations` command when using :class:`~django.db.migrations.operations.SeparateDatabaseAndState` (:ticket:`24278`). * Stripped microseconds from ``datetime`` values when using an older version of the MySQLdb DB API driver as it does not support fractional seconds (:ticket:`24584`).
tests/basic/tests.py +19 −4 Original line number Diff line number Diff line Loading @@ -192,15 +192,30 @@ class ModelTest(TestCase): @skipIfDBFeature('supports_microsecond_precision') def test_microsecond_precision_not_supported(self): # In MySQL, microsecond-level precision isn't available. You'll lose # microsecond-level precision once the data is saved. # In MySQL, microsecond-level precision isn't always available. You'll # lose microsecond-level precision once the data is saved. a9 = Article( headline='Article 9', pub_date=datetime(2005, 7, 31, 12, 30, 45, 180), ) a9.save() self.assertEqual(Article.objects.get(id__exact=a9.id).pub_date, datetime(2005, 7, 31, 12, 30, 45)) self.assertEqual( Article.objects.get(id__exact=a9.id).pub_date, datetime(2005, 7, 31, 12, 30, 45), ) @skipIfDBFeature('supports_microsecond_precision') def test_microsecond_precision_not_supported_edge_case(self): # In MySQL, microsecond-level precision isn't always available. You'll # lose microsecond-level precision once the data is saved. a = Article.objects.create( headline='Article', pub_date=datetime(2008, 12, 31, 23, 59, 59, 999999), ) self.assertEqual( Article.objects.get(pk=a.pk).pub_date, datetime(2008, 12, 31, 23, 59, 59), ) def test_manually_specify_primary_key(self): # You can manually specify the primary key when creating a new object. Loading