bulk_create method works wrong for mysql db

67 views
Skip to first unread message

Mykola Fenyk

unread,
Jan 5, 2019, 3:46:54 PM1/5/19
to Django users
I wrote a small test application for the company's list of employees. 
I wrote the custom migration to create the initial data and got problem with python manage.py migrate

Traceback (most recent call last):
 
File "/home/mykola/.virtualenvs/employees/lib/python3.5/site-packages/django/db/backends/mysql/base.py", line 71, in execute
   
return self.cursor.execute(query, args)
 
File "/home/mykola/.virtualenvs/employees/lib/python3.5/site-packages/MySQLdb/cursors.py", line 255, in execute
   
self.errorhandler(self, exc, value)
 
File "/home/mykola/.virtualenvs/employees/lib/python3.5/site-packages/MySQLdb/connections.py", line 50, in defaulterrorhandler
   
raise errorvalue
 
File "/home/mykola/.virtualenvs/employees/lib/python3.5/site-packages/MySQLdb/cursors.py", line 252, in execute
    res
= self._query(query)
 
File "/home/mykola/.virtualenvs/employees/lib/python3.5/site-packages/MySQLdb/cursors.py", line 378, in _query
    db
.query(q)
 
File "/home/mykola/.virtualenvs/employees/lib/python3.5/site-packages/MySQLdb/connections.py", line 280, in query
    _mysql
.connection.query(self, query)
_mysql_exceptions
.OperationalError: (1048, "Column 'company_id' cannot be null")


During handling of the above exception, another exception occurred:


Traceback (most recent call last):
 
File "manage.py", line 15, in <module>
    execute_from_command_line
(sys.argv)
 
File "/home/mykola/.virtualenvs/employees/lib/python3.5/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility
.execute()
 
File "/home/mykola/.virtualenvs/employees/lib/python3.5/site-packages/django/core/management/__init__.py", line 375, in execute
   
self.fetch_command(subcommand).run_from_argv(self.argv)
 
File "/home/mykola/.virtualenvs/employees/lib/python3.5/site-packages/django/core/management/base.py", line 316, in run_from_argv
   
self.execute(*args, **cmd_options)
 
File "/home/mykola/.virtualenvs/employees/lib/python3.5/site-packages/django/core/management/base.py", line 353, in execute
    output
= self.handle(*args, **options)
 
File "/home/mykola/.virtualenvs/employees/lib/python3.5/site-packages/django/core/management/base.py", line 83, in wrapped
    res
= handle_func(*args, **kwargs)
 
File "/home/mykola/.virtualenvs/employees/lib/python3.5/site-packages/django/core/management/commands/migrate.py", line 203, in handle
    fake_initial
=fake_initial,
 
File "/home/mykola/.virtualenvs/employees/lib/python3.5/site-packages/django/db/migrations/executor.py", line 117, in migrate
    state
= self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
 
File "/home/mykola/.virtualenvs/employees/lib/python3.5/site-packages/django/db/migrations/executor.py", line 147, in _migrate_all_forwards
    state
= self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
 
File "/home/mykola/.virtualenvs/employees/lib/python3.5/site-packages/django/db/migrations/executor.py", line 244, in apply_migration
    state
= migration.apply(state, schema_editor)
 
File "/home/mykola/.virtualenvs/employees/lib/python3.5/site-packages/django/db/migrations/migration.py", line 121, in apply
    operation
.database_forwards(self.app_label, schema_editor, old_state, project_state)
 
File "/home/mykola/.virtualenvs/employees/lib/python3.5/site-packages/django/db/migrations/operations/special.py", line 190, in database_forwards
   
self.code(from_state.apps, schema_editor)
 
File "/home/mykola/.virtualenvs/employees/lib/python3.5/site-packages/django_print_sql/print_sql.py", line 64, in wrapped
   
return func(*fargs, **fkwargs)
 
File "/home/mykola/projects/company/departments/migrations/0002_initial_creation_data.py", line 36, in create_objects
   
) for index in range(1, NUMBER)
 
File "/home/mykola/.virtualenvs/employees/lib/python3.5/site-packages/django/db/models/manager.py", line 82, in manager_method
   
return getattr(self.get_queryset(), name)(*args, **kwargs)
 
File "/home/mykola/.virtualenvs/employees/lib/python3.5/site-packages/django/db/models/query.py", line 465, in bulk_create
    ids
= self._batched_insert(objs_without_pk, fields, batch_size)
 
File "/home/mykola/.virtualenvs/employees/lib/python3.5/site-packages/django/db/models/query.py", line 1155, in _batched_insert
   
self._insert(item, fields=fields, using=self.db)
 
File "/home/mykola/.virtualenvs/employees/lib/python3.5/site-packages/django/db/models/query.py", line 1136, in _insert
   
return query.get_compiler(using=using).execute_sql(return_id)
 
File "/home/mykola/.virtualenvs/employees/lib/python3.5/site-packages/django/db/models/sql/compiler.py", line 1289, in execute_sql
    cursor
.execute(sql, params)
 
File "/home/mykola/.virtualenvs/employees/lib/python3.5/site-packages/django/db/backends/utils.py", line 100, in execute
   
return super().execute(sql, params)
 
File "/home/mykola/.virtualenvs/employees/lib/python3.5/site-packages/django/db/backends/utils.py", line 68, in execute
   
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
 
File "/home/mykola/.virtualenvs/employees/lib/python3.5/site-packages/django/db/backends/utils.py", line 77, in _execute_with_wrappers
   
return executor(sql, params, many, context)
 
File "/home/mykola/.virtualenvs/employees/lib/python3.5/site-packages/django/db/backends/utils.py", line 85, in _execute
   
return self.cursor.execute(sql, params)
 
File "/home/mykola/.virtualenvs/employees/lib/python3.5/site-packages/django/db/backends/mysql/base.py", line 76, in execute
   
raise utils.IntegrityError(*tuple(e.args))
django
.db.utils.IntegrityError: (1048, "Column 'company_id' cannot be null")


my code of migration:

# Generated by Django 2.1.4 on 2019-01-01 14:37
import names
import random
from django.db import migrations


COMPANY_MODEL
= "Company"
COMPANY_NAME
= "Codecademy"
NUMBER
= 11




def create_objects(apps, schema_editor):


    company_model
= apps.get_model("departments", COMPANY_MODEL)
    company
= company_model.objects.bulk_create([
        company_model
(name=COMPANY_NAME)
   
])[0]


    department_model
= apps.get_model("departments", "Department")


    departments
= department_model.objects.bulk_create([
        department_model
(
            name
="Department_{number}".format(
                number
=index
           
),
            company
=company
       
) for index in range(1, NUMBER)
   
])


    employee_model
= apps.get_model("departments", "Employee")


   
for department in departments:
        employee_model
.objects.bulk_create([
            employee_model
(
                name
=names.get_full_name(),
                active
=random.choice([True, False]),
                department
=department
           
) for _ in range(1, NUMBER)
       
])




def rollback_migration(apps, schema_editor):
    company_model
= apps.get_model("departments", COMPANY_MODEL)
    company_model
.objects.get(name=COMPANY_NAME).delete()




class Migration(migrations.Migration):


    dependencies
= [
       
('departments', '0001_initial'),
   
]


    operations
= [
        migrations
.RunPython(code=create_objects, reverse_code=rollback_migration)
   
]



I plaing in django console and I saw that this bulk_create() method create company object in db, but return [<Company: Company object (None)>] and I can not refresh_from_db() this object because it rise departments.models.Company.DoesNotExist: Company matching query does not exist. 
The most important thing is that there is no problem with postgresql bd!!! Can anyone help me? It looks like I found a bug...
Django version 2.1
project code:
Reply all
Reply to author
Forward
0 new messages