Ошибка Django MySQL при запуске тестов в virtualenv - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть приложение Django, отлично работающее на моей локальной версии Python 3.6, и я хочу убедиться, что оно будет работать при установке в другом месте.

По этой причине я создал virtualenv, используя точно такую ​​же версию Python, котораяглобально работает, но без каких-либо пакетов:

virtualenv --no-site-packages --python=$(which python3.6) clear_env
source clear_env/bin/activate

Затем я установил требования локально:

pip install -r requirements.txt 

Когда я пытаюсь запустить сервер или даже когда я использую панель администратораи вносить изменения в БД, все работает.Однако, когда я запускаю тесты:

python manage.py test --nomigrations

, я получаю следующую ошибку:

django.db.utils.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(6) NOT NULL, `user_id` integer NOT NULL, `content_type_id` integer NULL, `objec' at line 1")

, которая отслеживает:

  File "/home/niki/basic-django-ecommerce-site/clear_env/lib/python3.6/site-packages/django/db/backends/utils.py", line 83, in _execute
    return self.cursor.execute(sql)
  File "/home/niki/basic-django-ecommerce-site/clear_env/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 71, in execute
    return self.cursor.execute(query, args)
  File "/home/niki/basic-django-ecommerce-site/clear_env/lib/python3.6/site-packages/MySQLdb/cursors.py", line 206, in execute
    res = self._query(query)
  File "/home/niki/basic-django-ecommerce-site/clear_env/lib/python3.6/site-packages/MySQLdb/cursors.py", line 312, in _query
    db.query(q)
  File "/home/niki/basic-django-ecommerce-site/clear_env/lib/python3.6/site-packages/MySQLdb/connections.py", line 224, in query
    _mysql.connection.query(self, query)
MySQLdb._exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(6) NOT NULL, `user_id` integer NOT NULL, `content_type_id` integer NULL, `objec' at line 1")

Примечание: я использую--nomigrations флаг в тестировании, чтобы избежать этой проблемы .Это снова прекрасно работает в моей глобальной среде Python.

Первоначально я думал, что проблема может быть связана с некоторыми отсутствующими пакетами MySQL / Python в Linux, похожими на эту проблему .Я помню, что однажды мне пришлось установить что-то вроде libmysqlclient-dev python-dev и перекомпилировать версию Python, чтобы она заработала.

Однако, при условии, что мой virutalenv использует ту же версию Python, которая работает глобально, в чем может быть причина?И что еще более странно, почему только тесты завершаются с этой ошибкой, а runserver и все остальное, что связано с БД, работает?

1 Ответ

0 голосов
/ 28 февраля 2019

решаемая.Это было связано с возможной ошибкой в ​​pipreqs, которую я использую для сборки requirements.txt.Моя глобальная версия приложения использовала Django==2.0, а я использую Mysql 5.5.По какой-то причине pipreqs указал в качестве требования Django==2.1.5, которое поддерживает только MySQL> 5.6, как указано здесь В результате при выполнении новой установки требований в virtualenv более новая версия Django былаустановлен, который не взаимодействовал должным образом с моей локальной версией MySQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...