#27797: dumpdata generate a backup not usable with loaddata using MySQL -------------------------------------+------------------------------------- Reporter: David | Owner: nobody CHANIAL | Type: | Status: new Uncategorized | Component: Core | Version: 1.9 (Management commands) | Severity: Normal | Keywords: Triage Stage: | Has patch: 0 Unreviewed | Needs documentation: 0 | Needs tests: 0 Patch needs improvement: 0 | Easy pickings: 0 UI/UX: 0 | -------------------------------------+------------------------------------- == Introduction
Hi ! ---- I have two problem : * The first one is that django produce me a record using DateTimeField with a value of "0000-00-00 00:00:00.000000", i '''never''' update database content without using django orm api. For this ticket, i tried 2 hours to reproduce this problem, but i haven't. But i think that is there a different bug than the second one : * The second one, which permit me to discover the first one, is that dumpdata does not raise an error when dumping this kind of record. So, when using loaddata later, an error happend, failing to restore this record. ---- I'm using a MySQL database with server : 10.1.21-MariaDB and Django-1.9.12 During my tests, it's seems (unconfirmed) that SQLite has not the same behavior. == The bug * As said previously, no matter how the record in the database is weird or invalid, i think django MUST fail during '''dumpdata''' and not during '''loaddata''' when django can detect (as here) that produced data are not loadable. == Reproduce the bug * In an existing MySQL Django project named - for example - ''bobb'' : {{{ cd bobb python manage.py startapp campanella echo 'INSTALLED_APPS = list(INSTALLED_APPS) + ["campanella"]' >> bobb/settings.py export DJANGO_SETTINGS_MODULE=bobb.settings }}} {{{ cat >campanella/models.py <<'EOF' from __future__ import unicode_literals from django.db import models class Interpretation(models.Model): player = models.CharField(max_length=200) inserted_on = models.DateTimeField(auto_now_add=True) EOF }}} {{{ python manage.py makemigrations campanella python manage.py migrate campanella }}} {{{ mysql -udev_mybb -p -S/var/lib/mysql/mysql.sock db_dev_mybb -e 'INSERT INTO campanella_interpretation (player, inserted_on) VALUES ("Lang Lang", "0000-00-00 00:00:00.000000");' }}} {{{ python manage.py dumpdata campanella.interpretation --indent 4 > db.json }}} {{{ cat db.json [ { "model": "campanella.interpretation", "pk": 1, "fields": { "player": "Lang Lang", "inserted_on": null } } ] }}} {{{ python -c 'import django;django.setup();from campanella.models import Interpretation; Interpretation.objects.all().delete()' }}} {{{ python manage.py loaddata db.json Traceback (most recent call last): File "manage.py", line 10, in <module> execute_from_command_line(sys.argv) File "/home/dev_mybb/virtualenv/lib/python2.7/site- packages/django/core/management/__init__.py", line 353, in execute_from_command_line utility.execute() File "/home/dev_mybb/virtualenv/lib/python2.7/site- packages/django/core/management/__init__.py", line 345, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/home/dev_mybb/virtualenv/lib/python2.7/site- packages/django/core/management/base.py", line 348, in run_from_argv self.execute(*args, **cmd_options) File "/home/dev_mybb/virtualenv/lib/python2.7/site- packages/django/core/management/base.py", line 399, in execute output = self.handle(*args, **options) File "/home/dev_mybb/virtualenv/lib/python2.7/site- packages/django/core/management/commands/loaddata.py", line 60, in handle self.loaddata(fixture_labels) File "/home/dev_mybb/virtualenv/lib/python2.7/site- packages/django/core/management/commands/loaddata.py", line 100, in loaddata self.load_label(fixture_label) File "/home/dev_mybb/virtualenv/lib/python2.7/site- packages/django/core/management/commands/loaddata.py", line 158, in load_label obj.save(using=self.using) File "/home/dev_mybb/virtualenv/lib/python2.7/site- packages/django/core/serializers/base.py", line 201, in save models.Model.save_base(self.object, using=using, raw=True, **kwargs) File "/home/dev_mybb/virtualenv/lib/python2.7/site- packages/django/db/models/base.py", line 736, in save_base updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields) File "/home/dev_mybb/virtualenv/lib/python2.7/site- packages/django/db/models/base.py", line 820, in _save_table result = self._do_insert(cls._base_manager, using, fields, update_pk, raw) File "/home/dev_mybb/virtualenv/lib/python2.7/site- packages/django/db/models/base.py", line 859, in _do_insert using=using, raw=raw) File "/home/dev_mybb/virtualenv/lib/python2.7/site- packages/django/db/models/manager.py", line 122, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) File "/home/dev_mybb/virtualenv/lib/python2.7/site- packages/django/db/models/query.py", line 1039, in _insert return query.get_compiler(using=using).execute_sql(return_id) File "/home/dev_mybb/virtualenv/lib/python2.7/site- packages/django/db/models/sql/compiler.py", line 1060, in execute_sql cursor.execute(sql, params) File "/home/dev_mybb/virtualenv/lib/python2.7/site- packages/django/db/backends/utils.py", line 79, in execute return super(CursorDebugWrapper, self).execute(sql, params) File "/home/dev_mybb/virtualenv/lib/python2.7/site- packages/django/db/backends/utils.py", line 64, in execute return self.cursor.execute(sql, params) File "/home/dev_mybb/virtualenv/lib/python2.7/site- packages/django/db/backends/mysql/base.py", line 117, in execute six.reraise(utils.IntegrityError, utils.IntegrityError(*tuple(e.args)), sys.exc_info()[2]) File "/home/dev_mybb/virtualenv/lib/python2.7/site- packages/django/db/backends/mysql/base.py", line 112, in execute return self.cursor.execute(query, args) File "/home/dev_mybb/virtualenv/lib/python2.7/site- packages/MySQLdb/cursors.py", line 205, in execute self.errorhandler(self, exc, value) File "/home/dev_mybb/virtualenv/lib/python2.7/site- packages/MySQLdb/connections.py", line 36, in defaulterrorhandler raise errorclass, errorvalue django.db.utils.IntegrityError: Problem installing fixture '/home/dev_mybb/bobb/db.json': Could not load campanella.Interpretation(pk=1): (1048, "Column 'inserted_on' cannot be null") }}} -- Ticket URL: <https://code.djangoproject.com/ticket/27797> Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-updates+unsubscr...@googlegroups.com. To post to this group, send email to django-updates@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/049.5c2207924a01488a110c2a971fc1b9ea%40djangoproject.com. For more options, visit https://groups.google.com/d/optout.