Opened 7 years ago
Closed 7 years ago
#29624 closed Bug (wontfix)
Django 2.1 incompatible with sqlite 3.6.20
| Reported by: | zsblevins | Owned by: | nobody |
|---|---|---|---|
| Component: | Database layer (models, ORM) | Version: | 2.1 |
| Severity: | Release blocker | Keywords: | |
| Cc: | zsblevins@… | Triage Stage: | Accepted |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
Running tests using sqlite3 databases with Django 2.1 and sqlite 3.6.20 yields:
Traceback (most recent call last):
File "/tmp/py36/lib/python3.6/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection
self.connect()
File "/tmp/py36/lib/python3.6/site-packages/django/db/backends/base/base.py", line 194, in connect
self.connection = self.get_new_connection(conn_params)
File "/tmp/py36/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py", line 159, 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 "yahoo/contrib/sandy_app/manage.py", line 13, in <module>
execute_from_command_line(sys.argv)
File "/tmp/py36/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
utility.execute()
File "/tmp/py36/lib/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/tmp/py36/lib/python3.6/site-packages/django/core/management/commands/test.py", line 26, in run_from_argv
super().run_from_argv(argv)
File "/tmp/py36/lib/python3.6/site-packages/django/core/management/base.py", line 316, in run_from_argv
self.execute(*args, **cmd_options)
File "/tmp/py36/lib/python3.6/site-packages/django/core/management/base.py", line 353, in execute
output = self.handle(*args, **options)
File "/tmp/py36/lib/python3.6/site-packages/django/core/management/commands/test.py", line 56, in handle
failures = test_runner.run_tests(test_labels)
File "/tmp/py36/lib/python3.6/site-packages/django_nose/runner.py", line 308, in run_tests
result = self.run_suite(nose_argv)
File "/tmp/py36/lib/python3.6/site-packages/django_nose/runner.py", line 245, in run_suite
addplugins=plugins_to_add)
File "/tmp/py36/lib/python3.6/site-packages/nose/core.py", line 121, in __init__
**extra_args)
File "/opt/python/lib/python3.6/unittest/main.py", line 95, in __init__
self.runTests()
File "/tmp/py36/lib/python3.6/site-packages/nose/core.py", line 207, in runTests
result = self.testRunner.run(self.test)
File "/tmp/py36/lib/python3.6/site-packages/nose/core.py", line 50, in run
wrapper = self.config.plugins.prepareTest(test)
File "/tmp/py36/lib/python3.6/site-packages/nose/plugins/manager.py", line 99, in __call__
return self.call(*arg, **kw)
File "/tmp/py36/lib/python3.6/site-packages/nose/plugins/manager.py", line 167, in simple
result = meth(*arg, **kw)
File "/tmp/py36/lib/python3.6/site-packages/django_nose/plugin.py", line 82, in prepareTest
self.old_names = self.runner.setup_databases()
File "/tmp/py36/lib/python3.6/site-packages/django_nose/runner.py", line 495, in setup_databases
return super(NoseTestSuiteRunner, self).setup_databases()
File "/tmp/py36/lib/python3.6/site-packages/django/test/runner.py", line 551, in setup_databases
self.parallel, **kwargs
File "/tmp/py36/lib/python3.6/site-packages/django/test/utils.py", line 174, in setup_databases
serialize=connection.settings_dict.get('TEST', {}).get('SERIALIZE', True),
File "/tmp/py36/lib/python3.6/site-packages/django/db/backends/base/creation.py", line 68, in create_test_db
run_syncdb=True,
File "/tmp/py36/lib/python3.6/site-packages/django/core/management/__init__.py", line 148, in call_command
return command.execute(*args, **defaults)
File "/tmp/py36/lib/python3.6/site-packages/django/core/management/base.py", line 353, in execute
output = self.handle(*args, **options)
File "/tmp/py36/lib/python3.6/site-packages/django/core/management/base.py", line 83, in wrapped
res = handle_func(*args, **kwargs)
File "/tmp/py36/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 82, in handle
executor = MigrationExecutor(connection, self.migration_progress_callback)
File "/tmp/py36/lib/python3.6/site-packages/django/db/migrations/executor.py", line 18, in __init__
self.loader = MigrationLoader(self.connection)
File "/tmp/py36/lib/python3.6/site-packages/django/db/migrations/loader.py", line 49, in __init__
self.build_graph()
File "/tmp/py36/lib/python3.6/site-packages/django/db/migrations/loader.py", line 209, in build_graph
self.applied_migrations = recorder.applied_migrations()
File "/tmp/py36/lib/python3.6/site-packages/django/db/migrations/recorder.py", line 61, in applied_migrations
if self.has_table():
File "/tmp/py36/lib/python3.6/site-packages/django/db/migrations/recorder.py", line 44, in has_table
return self.Migration._meta.db_table in self.connection.introspection.table_names(self.connection.cursor())
File "/tmp/py36/lib/python3.6/site-packages/django/db/backends/base/base.py", line 255, in cursor
return self._cursor()
File "/tmp/py36/lib/python3.6/site-packages/django/db/backends/base/base.py", line 232, in _cursor
self.ensure_connection()
File "/tmp/py36/lib/python3.6/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection
self.connect()
File "/tmp/py36/lib/python3.6/site-packages/django/db/utils.py", line 89, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "/tmp/py36/lib/python3.6/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection
self.connect()
File "/tmp/py36/lib/python3.6/site-packages/django/db/backends/base/base.py", line 194, in connect
self.connection = self.get_new_connection(conn_params)
File "/tmp/py36/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py", line 159, in get_new_connection
conn = Database.connect(**conn_params)
django.db.utils.NotSupportedError: URIs not supported
ERROR: InvocationError for command '/tmp/py36/bin/python yahoo/contrib/sandy_app/manage.py test --with-xunit --xunit-file=artifacts/test/nosetests_py36.xml --xunit-testsuite-name=py36 --with-coverage --cover-xml --cover-erase --traverse-namespace --cover-tests --exe --cover-package=yahoo.contrib --cover-xml-file=artifacts/coverage/cobertura.xml tests' (exited with code 1)
Downgrading Django to 2.0.7 resolves. sqlite 3.7.17 on RHEL7 does not have the same issue, but is not available on RHEL6 systems.
Change History (3)
follow-up: 2 comment:1 by , 7 years ago
| Severity: | Normal → Release blocker |
|---|---|
| Triage Stage: | Unreviewed → Accepted |
comment:2 by , 7 years ago
Replying to Tim Graham:
Support for SQLite < 3.7.15 was removed in #28584. I didn't expect it would affect anyone but I guess I don't understand how the SQLite version relates to the Python version. Apparently, they aren't always linked. Anyway, we'll either document what versions of SQLite are supported or restore compatibility.
FWIW we're using Python 3.6.4. In our RHEL7 containers, sqlite 3.7.17 is installed and the build succeeds. Our RHEL6 containers have the 3.6.20 version of sqlite3.
comment:3 by , 7 years ago
| Resolution: | → wontfix |
|---|---|
| Status: | new → closed |
I've created a PR to document SQLite 3.7.15 as the minimum required version. For comparison, SQLite 3.6.20 was released November 2009.
Support for SQLite < 3.7.15 was removed in #28584. I didn't expect it would affect anyone but I guess I don't understand how the SQLite version relates to the Python version. Apparently, they aren't always linked. Anyway, we'll either document what versions of SQLite are supported or restore compatibility.