Opened 5 weeks ago

Last modified 5 weeks ago

#36085 assigned Bug

SQLite backend raises exception on negative array indices in JSONField

Reported by: savanto Owned by: savanto
Component: Database layer (models, ORM) Version: 5.1
Severity: Normal Keywords: sqlite, jsonfield
Cc: Sage Abdullah Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: yes
Easy pickings: no UI/UX: no
Pull Requests:19030

Description

Positive jsonfield array index queries can be constructed the usual way with kwargs (ie. Model.objects.filter(jsonfield__2=1)), while negative jsonfield array index query must be constructed using the splat operator on a dict: Model.objects.filter(**{"jsonfield__-2": 1})). When querying jsonfields in this way on the SQLite backend, the following error arises:

django.db.utils.OperationalError: bad JSON path: '$[-2]'

When constructing the query, the JSON path constructor simply appends any numerical value to the path (https://github.com/django/django/blob/5.1.4/django/db/models/fields/json.py#L155). But the SQLite backend uses a special syntax for performing negative-indexing in jsonfields (https://sqlite.org/json1.html#path_arguments) that is different from other backends: negative indices must be prepended by a literal # character.

According to the ticket's flags, the next step(s) to move this issue forward are:

  • To improve the patch as described in the pull request review comments or on this ticket, then uncheck "Patch needs improvement".
  • If creating a new pull request, include a link to the pull request in the ticket comment when making that update. The usual format is: [https://github.com/django/django/pull/#### PR].

Change History (3)

comment:2 by Tim Graham, 5 weeks ago

Patch needs improvement: set
Triage Stage: UnreviewedAccepted

comment:3 by Sage Abdullah, 5 weeks ago

Cc: Sage Abdullah added
Note: See TracTickets for help on using tickets.
Back to Top