【问题标题】:Django - deterministic=True requires SQLite 3.8.3 or higher upon running python manage.py runserverDjango - 确定性=True 在运行 python manage.py runserver 时需要 SQLite 3.8.3 或更高版本
【发布时间】:2021-02-26 04:10:55
【问题描述】:

我正在从 AWS 运行一个 linux red hat 环境。

我已按照将 sqlite3 升级到“最新”版本的所有说明进行操作。

我正在运行 python 3.9.2(并已使用 LD_RUN_PATH=/usr/local/lib ./configure 重新编译它)和 django 版本 4。

我已经设置了一个虚拟环境来安装和运行 django。我已更改激活脚本以包含 export LD_LIBRARY_PATH="/usr/local/lib"

在运行 python manage.py runserver 时,我收到错误 django.db.utils.NotSupportedError: deterministic=True requires SQLite 3.8.3 or higher。我已经打开了文件/home/ec2-user/django/django/db/backends/sqlite3/base.py(发生错误的地方)并且在错误行之后包含了一个打印语句:

print("**************************\n" +
    str(Database.sqlite_version) +
    "\n" + str(Database.sqlite_version_info) +
    "\n**************************")

返回:

**************************
3.28.0
(3, 28, 0)
**************************
**************************
3.28.0
(3, 28, 0)
**************************

请告诉我需要哪些额外信息。我在stack 上下搜索,找不到pop 的正确解决方案。

提前谢谢你!

编辑

这是回溯:

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/ec2-user/django/django/db/backends/base/base.py", line 219, in ensure_connection
    self.connect()
  File "/home/ec2-user/django/django/utils/asyncio.py", 21 in inner
    return func(*args, **kwargs)
  File "/home/ec2-user/django/django/db/backends/base/base.py", line 200, in connect
    self.connection = self.get_new_connection(conn_params)
  File "/home/ec2-user/django/django/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
  File "/home/ec2-user/django/django/db/backends/sqlite3/base.py", line 210, 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 "/opt/python/lib/python/3.9/threading.py", line 954, in _bootstrap_inner
    self.run()
  File "/opt/python39/lib/python3.9/threading.py", line 892, in run
    self._target(*self._args, **self._kwargs)
  File "/home/ec2-user/django/django/utils/autoreload.py", line 64, in wrapper
    fn(*args, **kwargs)
  File "/home/ec2-user/django/django/core/management/commands/runserver.py", line 126, in inner_run
    self.check_migrations()
  File "/home/ec2-user/django/django/core/management/base.py", line 486, in check_migrations
    executor = MigrationExecutor(connectsion[DEFAULT_DB_ALIAS])
  File "/home/ec2-user/django/django/db/migrations/executor.py", line 18, in __init__
    self.loader = MigrationLoader(self.connection)
  File "/home/ec2-user/django/django/db/migrations/loader.py", line 53, in __init__
    self.build_graph()
  File "/home/ec2-user/django/django/db/migrations/loader.py", line 220, in build_graph
    self.applied_migrations = recorder.applied_migrations()
  File "/home/ec2-user/django/django/db/migrations/recorder.py", line 77, in applied_migrations
    if self.has_table():
  File "/home/ec2-user/django/django/db/migrations/recorder.py", line 55, in has_table
    with self.connection.cursor() as cursor:
  File "/home/ec2-user/django/django/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
  File "/home/ec2-user/django/django/db/backends/base/base.py", line 259, in cursor
    return self._cursor()
  File "/home/ec2-user/django/django/db/backends/base/base.py", line 235, in _cursor
    self.ensure_connection()
  File "/home/ec2-user/django/djanog/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
  File "/home/ec2-user/django/django/db/backends/base/base.py", line 219, in ensure_connection
    self.connect()
  File "/home/ec2-user/django/django/db/utils.py", line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/home/ec2-user/django/django/db/backends/base/base.py", line 219, in ensure_connection
    self.connect()
  File "/home/ec2-user/django/django/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
  File "/home/ec2-user/django/django/db/backends/base/base.py", line 200, in connect
    self.connection = self.get_new_connection(conn_params)
  File "/home/ec2-user/django/django/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
  File "/home/ec2-user/django/django/db/backends/sqlite3/base.py", line 210, 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 linux python-3.9


    【解决方案1】:

    我在我的 linux Centos7+python3.9.6+Django3.2.5 中遇到了同样的问题。 尽管 sqlite3 已更新到最新版本。看来这没什么用。一种解决方案是将数据库从 sqlite3 更改为 pysqlite3。 启动virtualenv后,安装pysqlite

    pip3 install pysqlite3
    pip3 install pysqlite3-binary
    

    并在 base.py 中更改数据库

    vim python3.9.6/site-packages/django/db/backends/sqlite3/base.py
    
    # from sqlite3 import dbapi2 as Database # annotation
    from pysqlite3 import dbapi2 as Database # import pysqlite3
    

    重新启动 django 服务器,它就可以工作了。

    【讨论】:

    • 这不是基本答案,但效果很好。谢谢
    • 所以,我想知道这有什么潜在的缺点。 Django 模型是否仍然可以使用这个数据库库?还可以结合使用 Django 会话、Celery 等吗?我还缺少什么?
    • 话虽如此,我将其标记为正确答案,直到有人找到更好的答案。
    【解决方案2】:

    我遇到了和你一样的问题。当我尝试在 Elastic Beanstalk 上进行部署时。 在我的例子中,当我像这样初始化 EB CLI 时使用了 Python 3.8

    eb init -p python-3.8 django-project ⛔
    

    这不是在 64 位 Amazon Linux 2(默认)上运行它的好 Python 版本。改成 python-3.7

    eb init -p python-3.7 django-project ✅
    

    【讨论】:

    • 问题是我想保持python更新。
    • 如果您使用的是 Django 4,此答案将不起作用(需要 Python 3.8+)
    【解决方案3】:

    目前我能想到的最好方法是进入/home/ec2-user/django/django/db/backends/sqlite3/base.py,将get_new_connection()中的函数变量deterministic=True更改为deterministic=False...

    这将消除错误,但似乎是一个超级欺骗的解决方案。如果有人有更好的解决方法,请告诉我。

    【讨论】:

      猜你喜欢
      • 2022-11-04
      • 2022-07-03
      • 2020-12-11
      • 2022-08-13
      • 2019-10-24
      • 2020-08-24
      • 2019-09-04
      • 2020-06-14
      • 2020-07-04
      相关资源
      最近更新 更多