@Gourii

Как исправить ошибку sqlite3 в django?

Здравствуйте.
Имеется тестовый проект django, который нормально запускается и работает под Windows 7, однако не работает в Linux Ubuntu Server.
Суть проблемы, при запуске тестового сервера django, вылетает ошибка:
Ошибка

*****@ServerUbuntu:~/samba/share/Projects/test_site$ python3.8 manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
Exception in thread django-main-thread:
Traceback (most recent call last):
File "/home/*****/.local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
self.connect()
File "/home/*****/.local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/home/*****/.local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 200, in connect
self.connection = self.get_new_connection(conn_params)
File "/home/*****/.local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/home/*****/.local/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py", line 215, in get_new_connection
create_deterministic_function('django_date_extract', 2, _sqlite_datetime_extract)
sqlite3.NotSupportedError: deterministic=True requires SQLite 3.8.3 or higher

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/usr/local/lib/python3.8/threading.py", line 932, in _bootstrap_inner
self.run()
File "/usr/local/lib/python3.8/threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "/home/*****/.local/lib/python3.8/site-packages/django/utils/autoreload.py", line 53, in wrapper
fn(*args, **kwargs)
File "/home/*****/.local/lib/python3.8/site-packages/django/core/management/commands/runserver.py", line 121, in inner_run
self.check_migrations()
File "/home/*****/.local/lib/python3.8/site-packages/django/core/management/base.py", line 459, in check_migrations
executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
File "/home/*****/.local/lib/python3.8/site-packages/django/db/migrations/executor.py", line 18, in __init__
self.loader = MigrationLoader(self.connection)
File "/home/*****/.local/lib/python3.8/site-packages/django/db/migrations/loader.py", line 53, in __init__
self.build_graph()
File "/home/*****/.local/lib/python3.8/site-packages/django/db/migrations/loader.py", line 216, in build_graph
self.applied_migrations = recorder.applied_migrations()
File "/home/*****/.local/lib/python3.8/site-packages/django/db/migrations/recorder.py", line 77, in applied_migrations
if self.has_table():
File "/home/*****/.local/lib/python3.8/site-packages/django/db/migrations/recorder.py", line 55, in has_table
with self.connection.cursor() as cursor:
File "/home/*****/.local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/home/*****/.local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 259, in cursor
return self._cursor()
File "/home/*****/.local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 235, in _cursor
self.ensure_connection()
File "/home/*****/.local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/home/*****/.local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
self.connect()
File "/home/*****/.local/lib/python3.8/site-packages/django/db/utils.py", line 90, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "/home/*****/.local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
self.connect()
File "/home/*****/.local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/home/*****/.local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 200, in connect
self.connection = self.get_new_connection(conn_params)
File "/home/*****/.local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/home/*****/.local/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py", line 215, in get_new_connection
create_deterministic_function('django_date_extract', 2, _sqlite_datetime_extract)
django.db.utils.NotSupportedError: deterministic=True requires SQLite 3.8.3 or higher

Django ругается на SQLite, хотя установлена крайняя версия:

*****@ServerUbuntu:~/samba/share/Projects/test_site$ sqlite3 --version
3.34.0 2020-12-01 16:14:00 a26b6597e3ae272231b96f9982c3bcc17ddec2f2b6eb4df06a224b91089fed5b

Если посмотреть версию sqlite3 в python, то версия следующая:

*****@ServerUbuntu:~/samba/share/Projects/test_site$ python3.8
Python 3.8.6 (default, Dec 12 2020, 08:29:04)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> sqlite3.sqlite_version
'3.11.0'

Почитав форумы, пробовал разные варианты решения проблемы, переустанавливал sqlite, пересобирал python, ничего не помогает.
  • Вопрос задан
  • 499 просмотров
Решения вопроса 1
@Gourii Автор вопроса
В общем, я решил проблему, установил версию Django 3.0.
Если при запуске проекта будет ошибка:

return database_name == ‘:memory:’ or ‘mode=memory’ in database_name
TypeError: argument of type ‘PosixPath’ is not iterable

То в настройках проекта в строке имени базы данных прописать str

'NAME': str(BASE_DIR / 'db.sqlite3')
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@mkone112
Начинающий питонист.
Может pip install -U sqlite3?
Ответ написан
Sergei_Erjemin
@Sergei_Erjemin
Улыбайся, будь самураем...
Что-то с django_date_extract... Вообще в SQLite немного странные обработки даты-времени, и в часовых поясах она от версии к версии путается, и в форматах... Я бы посмотрел в сторону так ли указано формирование даты-времени в твоём проекте, когда ты это дату-время "засовываешь" в виде срок в БД. На домашней и продашен-системе, форматы по умолчанию могут быть разные, и надёжнее все преобразования строк типа 2020-12-14 15:27:00.000 MSK в дату-время не получать БД, а делать на стороне Python...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы