Django по-разному обрабатывает имена таблиц базы данных в Ubuntu и Windows

Я создал приложение Django локально и теперь пытаюсь развернуть его (или хотя бы протестировать) на экземпляре AWS EC2, используя Ubuntu 20.04 (t2.micro).

При локальном размещении приложение работает нормально. При размещении на AWS возникает ProgrammingError (1146, "Таблица 'database_name.exampleAppName_modelname' не существует").

Что я пробовал

На сервере, используя MySQL в командной строке, я сделал:

USE database_name; 
SHOW tables;

В списке таблиц ожидается следующее:

+----------------------------------------------+
| Tables_in_database_name                      |
+----------------------------------------------+
| auth_group                                   |
| auth_group_permissions                       |
| auth_permission                              |
| auth_user                                    |
| auth_user_groups                             |
| auth_user_user_permissions                   |
| django_admin_log                             |
| django_content_type                          |
| django_migrations                            |
| django_session                               |
| **exampleappname_modelname**                 |

Причина ошибки кажется довольно очевидной в том, что Django запрашивает 'exampleAppName', но база данных содержит 'exampleappname' вместо этого.

Однако, когда я запускаю те же команды MySQL локально, я получаю точно такой же список таблиц. И когда я запускаю приложение Django локально, ошибок нет.

Я проверил имена, которые Django автоматически присваивает таблицам на сервере и локально с помощью оболочки:

ModelName._meta.db_table

В обоих случаях возвращается: 'exampleAppName_modelname', что приводит к моему вопросу.

Что бы я хотел знать

Если имя 'db_table' автоматически присваивает имя приложения в верхнем регистре, почему имена таблиц были созданы в нижнем регистре? Далее, если имена таблиц назначаются одинаково в обеих системах, почему это вызывает ошибки только на сервере?

Я знаю, что могу вручную изменить свойство 'db_table' с помощью

class ModelName(models.Model):
   *fields*

   class Meta:
      db_table = 'exampleappname_modelname'

но я бы предпочел понять, что именно вызывает эту проблему, чтобы мне не пришлось вручную переопределять большое количество моделей.

В случае, если это имеет значение, я использую:

  • Python 3.8.10
  • Django 4.0.1
  • MySQL 8.0.27
  • mysqlclient 2.1.0
Вернуться на верх