Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

gh-61162: Clarify sqlite3 connection context manager docs #93890

Merged
merged 16 commits into from
Jun 19, 2022
Merged
22 changes: 18 additions & 4 deletions Doc/library/sqlite3.rst
Original file line number Diff line number Diff line change
@@ -1431,13 +1431,27 @@ case-insensitively by name:
.. literalinclude:: ../includes/sqlite3/rowclass.py


.. _sqlite3-connection-context-manager:

Using the connection as a context manager
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Connection objects can be used as context managers
that automatically commit or rollback transactions. In the event of an
exception, the transaction is rolled back; otherwise, the transaction is
committed:
A :class:`Connection` object can be used as a context manager that
automatically commits or rolls back open transactions when leaving the body of
the context manager.
If the body of the :keyword:`with` statement finishes without exceptions,
the transaction is committed.
If this commit fails,
or if the body of the ``with`` statement raises an uncaught exception,
the transaction is rolled back.

If there is no open transaction upon leaving the body of the ``with`` statement,
the context manager is a no-op.

.. note::

The context manager neither implicitly opens a new transaction
nor closes the connection.

.. literalinclude:: ../includes/sqlite3/ctx_manager.py

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Clarify :mod:`sqlite3` behavior when :ref:`sqlite3-connection-context-manager`.