Description
Description
Double quoted string literals in SQLite called from Python are being deprecated.
See https://sqlite.org/quirks.html#dblquote
Steps to reproduce
python -m manage version
5.1.1
python -m manage migrate
...
File "/usr/home/geoff/Projects/django/.venv/lib/python3.11/site-packages/django/db/backends/sqlite3/base.py", line 352, in execute
return super().execute(query)
^^^^^^^^^^^^^^^^^^^^^^
django.db.utils.OperationalError: no such column: "cms_page" - should this be a string literal in single-quotes?
Debug print(query) yields the SQL statement:
SQLite version 3.46.0 2024-05-23 13:25:27
sqlite> SELECT sql FROM sqlite_master WHERE type='table' and name="cms_page";
Parse error: no such column: "cms_page" - should this be a string literal in single-quotes?
Expected behaviour
sqlite> SELECT sql FROM sqlite_master WHERE type='table' and name='cms_page';
CREATE TABLE "cms_page" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "created_by" varchar(70) NOT NULL, "changed_by" varchar(70) NOT NULL, "creation_date" datetime NOT NULL, "changed_date" datetime NOT NULL, "publication_date" datetime NULL, "publication_end_date" datetime NULL, "in_navigation" bool NOT NULL, "soft_root" bool NOT NULL, "reverse_id" varchar(40) NULL, "navigation_extenders" varchar(80) NULL, "template" varchar(100) NOT NULL, "login_required" bool NOT NULL, "limit_visibility_in_menu" smallint NULL, "is_home" bool NOT NULL, "application_urls" varchar(200) NULL, "application_namespace" varchar(200) NULL, "publisher_is_draft" bool NOT NULL, "languages" varchar(255) NULL, "revision_id" integer unsigned NOT NULL CHECK ("revision_id" >= 0), "xframe_options" integer NOT NULL, "site_id" integer NOT NULL REFERENCES "django_site" ("id") DEFERRABLE INITIALLY DEFERRED, "depth" integer unsigned NOT NULL CHECK ("depth" >= 0), "numchild" integer unsigned NOT NULL CHECK ("numchild" >= 0), "path" varchar(255) NOT NULL UNIQUE, "parent_id" integer NULL REFERENCES "cms_page" ("id") DEFERRABLE INITIALLY DEFERRED, "publisher_public_id" integer NULL UNIQUE REFERENCES "cms_page" ("id") DEFERRABLE INITIALLY DEFERRED)
Discussion
'table' and 'cms_page' are string literals in this context but could be names which can be double quoted in other contexts e.g., SELECT * from "cms_page";