Skip to content

Commit

Permalink
gh-100668: Clarify how sqlite3 maps parameters onto placeholders (GH-…
Browse files Browse the repository at this point in the history
…100960)

(cherry picked from commit 206f05a)

Co-authored-by: Erlend E. Aasland <erlend.aasland@protonmail.com>
Co-authored-by: C.A.M. Gerlach <CAM.Gerlach@Gerlach.CAM>
  • Loading branch information
3 people authored Jan 14, 2023
1 parent 39c1f68 commit c7aa392
Showing 1 changed file with 17 additions and 9 deletions.
26 changes: 17 additions & 9 deletions Doc/library/sqlite3.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1823,15 +1823,18 @@ close the single quote and inject ``OR TRUE`` to select all rows::
Instead, use the DB-API's parameter substitution. To insert a variable into a
query string, use a placeholder in the string, and substitute the actual values
into the query by providing them as a :class:`tuple` of values to the second
argument of the cursor's :meth:`~Cursor.execute` method. An SQL statement may
use one of two kinds of placeholders: question marks (qmark style) or named
placeholders (named style). For the qmark style, ``parameters`` must be a
:term:`sequence <sequence>`. For the named style, it can be either a
:term:`sequence <sequence>` or :class:`dict` instance. The length of the
:term:`sequence <sequence>` must match the number of placeholders, or a
:exc:`ProgrammingError` is raised. If a :class:`dict` is given, it must contain
keys for all named parameters. Any extra items are ignored. Here's an example of
both styles:
argument of the cursor's :meth:`~Cursor.execute` method.

An SQL statement may use one of two kinds of placeholders:
question marks (qmark style) or named placeholders (named style).
For the qmark style, *parameters* must be a
:term:`sequence` whose length must match the number of placeholders,
or a :exc:`ProgrammingError` is raised.
For the named style, *parameters* should be
an instance of a :class:`dict` (or a subclass),
which must contain keys for all named parameters;
any extra items are ignored.
Here's an example of both styles:

.. testcode::

Expand All @@ -1858,6 +1861,11 @@ both styles:

[('C', 1972)]

.. note::

:pep:`249` numeric placeholders are *not* supported.
If used, they will be interpreted as named placeholders.


.. _sqlite3-adapters:

Expand Down

0 comments on commit c7aa392

Please sign in to comment.