У меня есть приложение 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
и все остальное, что связано с БД, работает?