Python types via :ref:`converters <sqlite3-converters>`.
+.. _sqlite3-default-converters:
+
+Default adapters and converters (deprecated)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. note::
+
+ The default adapters and converters are deprecated as of Python 3.12.
+ Instead, use the :ref:`sqlite3-adapter-converter-recipes`
+ and tailor them to your needs.
+
+The deprecated default adapters and converters consist of:
+
+* An adapter for :class:`datetime.date` objects to :class:`strings <str>` in
+ `ISO 8601`_ format.
+* An adapter for :class:`datetime.datetime` objects to strings in
+ ISO 8601 format.
+* A converter for :ref:`declared <sqlite3-converters>` "date" types to
+ :class:`datetime.date` objects.
+* A converter for declared "timestamp" types to
+ :class:`datetime.datetime` objects.
+ Fractional parts will be truncated to 6 digits (microsecond precision).
+
+.. note::
+
+ The default "timestamp" converter ignores UTC offsets in the database and
+ always returns a naive :class:`datetime.datetime` object. To preserve UTC
+ offsets in timestamps, either leave converters disabled, or register an
+ offset-aware converter with :func:`register_converter`.
+
+.. deprecated:: 3.12
+
+.. _ISO 8601: https://en.wikipedia.org/wiki/ISO_8601
+
+
.. _sqlite3-cli:
Command-line interface
.. _sqlite3-adapters:
-Using adapters to store custom Python types in SQLite databases
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+How to adapt custom Python types to SQLite values
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SQLite supports only a limited set of data types natively.
To store custom Python types in SQLite databases, *adapt* them to one of the
.. _sqlite3-conform:
-Letting your object adapt itself
-""""""""""""""""""""""""""""""""
+How to write adaptable objects
+""""""""""""""""""""""""""""""
Suppose we have a :class:`!Point` class that represents a pair of coordinates,
``x`` and ``y``, in a Cartesian coordinate system.
.. literalinclude:: ../includes/sqlite3/adapter_point_1.py
-Registering an adapter callable
-"""""""""""""""""""""""""""""""
+How to register adapter callables
+"""""""""""""""""""""""""""""""""
The other possibility is to create a function that converts the Python object
to an SQLite-compatible type.
.. _sqlite3-converters:
-Converting SQLite values to custom Python types
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+How to convert SQLite values to custom Python types
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Writing an adapter lets you convert *from* custom Python types *to* SQLite
values.
.. literalinclude:: ../includes/sqlite3/converter_point.py
-.. _sqlite3-default-converters:
-
-Default adapters and converters (deprecated)
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. note::
-
- The default adapters and converters are deprecated as of Python 3.12.
- Instead, use the :ref:`sqlite3-adapter-converter-recipes`
- and tailor them to your needs.
-
-The deprecated default adapters and converters consist of:
-
-* An adapter for :class:`datetime.date` objects to :class:`strings <str>` in
- `ISO 8601`_ format.
-* An adapter for :class:`datetime.datetime` objects to strings in
- ISO 8601 format.
-* A converter for :ref:`declared <sqlite3-converters>` "date" types to
- :class:`datetime.date` objects.
-* A converter for declared "timestamp" types to
- :class:`datetime.datetime` objects.
- Fractional parts will be truncated to 6 digits (microsecond precision).
-
-.. note::
-
- The default "timestamp" converter ignores UTC offsets in the database and
- always returns a naive :class:`datetime.datetime` object. To preserve UTC
- offsets in timestamps, either leave converters disabled, or register an
- offset-aware converter with :func:`register_converter`.
-
-.. deprecated:: 3.12
-
-.. _ISO 8601: https://en.wikipedia.org/wiki/ISO_8601
-
-
.. _sqlite3-adapter-converter-recipes:
Adapter and converter recipes
.. _sqlite3-connection-shortcuts:
-Using connection shortcut methods
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+How to use connection shortcut methods
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Using the :meth:`~Connection.execute`,
:meth:`~Connection.executemany`, and :meth:`~Connection.executescript`
.. _sqlite3-connection-context-manager:
-Using the connection as a context manager
+How to use the connection context manager
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
A :class:`Connection` object can be used as a context manager that
.. _sqlite3-uri-tricks:
-Working with SQLite URIs
-^^^^^^^^^^^^^^^^^^^^^^^^
+How to work with SQLite URIs
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Some useful URI tricks include: