【问题标题】:How to fix error: django.db.utils.NotSupportedError: URIs not supported如何修复错误:django.db.utils.NotSupportedError: URIs not supported
【发布时间】:2018-09-05 02:36:45
【问题描述】:

在我正在使用的 Linux 机器(AWS)中的 Django 项目中:

  • Python 3.5.1
  • Django 1.11.7

我已经为我的项目创建了虚拟环境,并且所有依赖项都完美地安装在那里。对于我使用 sqlite3 的数据库。有关版本详细信息,请参见下文。

>>>import sqlite3
>>>sqlite3.version
'2.6.0'
>>>sqlite3.sqlite_version_info
(3, 7, 17)

settings.py 中的 DATABASES 部分如下:

DATABASES = {
   'default': {
      'ENGINE': 'django.db.backends.sqlite3',
      'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
   }
}

在运行 runserver 时,我遇到一个异常,即 sqlite3.NotSupportedError: URIs not supported,它会生成错误 django.db.utils.NotSupportedError: URIs not supported,我无法修复。

我浏览过djangoproject.comgoogle.forum 之类的帖子,但仍然无法理解出现此错误的原因。我也尝试过 python manage.py makemigrations 但同样的错误也随之而来。

注意:在 windows 机器上,我的项目运行良好。

请看下面的回溯:

# python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).
Unhandled exception in thread started by <function check_errors. 
<locals>.wrapper at 0x7f07ff09c2f0>
Traceback (most recent call last):
  File "/tech/poc/env/lib/python3.5/site-packages/django/db/backends/base/base.py", line 213, in ensure_connection
    self.connect()
  File "/tech/poc/env/lib/python3.5/site- packages/django/db/backends/base/base.py", line 189, in connect
    self.connection = self.get_new_connection(conn_params)
  File "/tech/poc/env/lib/python3.5/site-packages/django/db/backends/sqlite3/base.py", line 198, in get_new_connection
    conn = Database.connect(**conn_params)
  sqlite3.NotSupportedError: URIs not supported

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

  Traceback (most recent call last):
  File "/tech/poc/env/lib/python3.5/site-packages/django/utils/autoreload.py", line 228, in wrapper
    fn(*args, **kwargs)
  File "/tech/poc/env/lib/python3.5/site-packages/django/core/management/commands/runserver.py", line 128, in inner_run
    self.check_migrations()
  File "/tech/poc/env/lib/python3.5/site-packages/django/core/management/base.py", line 422, in check_migrations
    executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
  File "/tech/poc/env/lib/python3.5/site-packages/django/db/migrations/executor.py", line 20, in __init__
    self.loader = MigrationLoader(self.connection)
  File "/tech/poc/env/lib/python3.5/site-packages/django/db/migrations/loader.py", line 52, in __init__
    self.build_graph()
  File "/tech/poc/env/lib/python3.5/site-packages/django/db/migrations/loader.py", line 209, in build_graph
    self.applied_migrations = recorder.applied_migrations()
  File "/tech/poc/env/lib/python3.5/site-packages/django/db/migrations/recorder.py", line 65, in applied_migrations
    self.ensure_schema()
  File "/tech/poc/env/lib/python3.5/site-packages/django/db/migrations/recorder.py", line 52, in ensure_schema
    if self.Migration._meta.db_table in self.connection.introspection.table_names(self.connection.cursor()):
  File "/tech/poc/env/lib/python3.5/site-packages/django/db/backends/base/base.py", line 254, in cursor
    return self._cursor()
  File "/tech/poc/env/lib/python3.5/site-packages/django/db/backends/base/base.py", line 229, in _cursor
    self.ensure_connection()
  File "/tech/poc/env/lib/python3.5/site-packages/django/db/backends/base/base.py", line 213, in ensure_connection
    self.connect()
  File "/tech/poc/env/lib/python3.5/site-packages/django/db/utils.py", line 94, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/tech/poc/env/lib/python3.5/site-packages/django/utils/six.py", line 685, in reraise
    raise value.with_traceback(tb)
  File "/tech/poc/env/lib/python3.5/site-packages/django/db/backends/base/base.py", line 213, in ensure_connection
    self.connect()
  File "/tech/poc/env/lib/python3.5/site-packages/django/db/backends/base/base.py", line 189, in connect
    self.connection = self.get_new_connection(conn_params)
  File "/tech/poc/env/lib/python3.5/site-packages/django/db/backends/sqlite3/base.py", line 198, in get_new_connection
    conn = Database.connect(**conn_params)
django.db.utils.NotSupportedError: URIs not supported

请帮助理解并修复此错误。堆栈中没有与此问题相关的帖子,我也没有在 google 中找到任何相关内容。

【问题讨论】:

  • 有人对这个问题有任何想法吗?是什么原因以及如何解决这个问题?请告诉我。
  • 我有同样的问题,它在我的机器上坏了,但我所有的同事都没有得到这个错误。我在 django 的代码中进行了调试,发现在大约第 194 行的django.db.backends.sqlite3.base 中,它设置了uriTrue。如果我将其注释掉,它会起作用。

标签: python django linux amazon-web-services sqlite


【解决方案1】:

1.您必须先检查 sqlite3 版本。应该是3.X 我的配置是Python 3.7django 2.1.7sqlite3。 您可以检查 sqlite3 版本如下: &gt;&gt;import sqlite3

&gt;&gt;sqlite3.version '2.6.0' &gt;&gt;&gt; sqlite3.sqlite_version_info (3, 6, 20)`

  1. 签到"/usr/local/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py" 找线”kwargs.update({'check_same_thread': False, 'uri': False}) 如果 'uri' 为 True,则以 root 身份将其更改为 False。 代码更改后,重新启动机器并运行python runserver migrate 这应该可以解决您的问题。

另外,您可以尝试在SETTINGS.py 文件中使用硬编码的 db.sqli3 文件名更改 DATABASE['NAME']。

【讨论】:

    【解决方案2】:

    我遇到了类似的问题。原来 Django 2.1 与 sqlite 3.6.20 不兼容。降级到 2.0.x 版本,你应该会很好。该问题已被提出并标记为“已关闭的错误 - 不会修复”here

    【讨论】:

      【解决方案3】:

      检查 BASE_DIR 设置中指定的路径。

      【讨论】:

      • 我已经检查过了。 BASE_DIR 正确指向 db.sqlite3 文件。
      猜你喜欢
      • 2012-04-14
      • 1970-01-01
      • 1970-01-01
      • 2022-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-10
      • 2019-09-25
      相关资源
      最近更新 更多