Opened 6 years ago

Last modified 5 years ago

#29808 closed Bug

column checks inside "executor.py" is not case sensitive — at Initial Version

Reported by: Elaci0 Owned by: nobody
Component: Migrations Version: dev
Severity: Normal Keywords: migration fake-initial case sensitive
Cc: Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

Hello,
I'm using this guide https://datascience.blog.wzb.eu/2017/03/21/using-django-with-an-existinglegacy-database for my studies with camelCasing together with Django (yes, I'm still trying to keep the naming convention we have inside our DB, also for the model's names)

Now, I'm really new to Django and I don't know if it's intended but this part of code inside "executor.py"' is doing case sensitive comparison to check if a column is already present in a database

                column_names = [
                    column.name for column in
                    self.connection.introspection.get_table_description(self.connection.cursor(), table)
                ]
                if field.column not in column_names:
                    return False, project_state

so if my migration file contains something like this

        migrations.AddField(
            model_name='city',
            name='countrycode',
            field=models.ForeignKey(db_column='countryCode', on_delete=django.db.models.deletion.CASCADE, to='my_DB.country'),

and I run python3 manage.py migrate --database my_DB --fake-initial my_first_app

it fires an error saying that that table already exists
django.db.utils.OperationalError: (1050, "Table 'city' already exists")

If I run python3 manage.py migrate --database my_DB --fake my_first_app it correctly fakes my_first_app
The my_DB collation is case insenstive, while mysql is running with the " --lower-case-table-names=0" option

Change History (0)

Note: See TracTickets for help on using tickets.
Back to Top