Highlight in docs that the context manager doesn't close the connection

Code as in #889 is not robust, but the behaviour is actually
counter-intuitive.
This commit is contained in:
Daniele Varrazzo 2019-04-07 11:19:56 +01:00
parent 4058f363d6
commit 5e01c47818

View File

@ -797,9 +797,7 @@ is rolled back.
When a cursor exits the ``with`` block it is closed, releasing any resource When a cursor exits the ``with`` block it is closed, releasing any resource
eventually associated with it. The state of the transaction is not affected. eventually associated with it. The state of the transaction is not affected.
Note that, unlike file objects or other resources, exiting the connection's A connection can be used in more than a ``with`` statement
``with`` block *doesn't close the connection* but only the transaction
associated with it: a connection can be used in more than a ``with`` statement
and each ``with`` block is effectively wrapped in a separate transaction:: and each ``with`` block is effectively wrapped in a separate transaction::
conn = psycopg2.connect(DSN) conn = psycopg2.connect(DSN)
@ -814,6 +812,18 @@ and each ``with`` block is effectively wrapped in a separate transaction::
conn.close() conn.close()
.. warning::
Unlike file objects or other resources, exiting the connection's
``with`` block **doesn't close the connection**, but only the transaction
associated to it. If you want to make sure the connection is closed after
a certain point, you should still use a try-catch block::
conn = psycopg2.connect(DSN)
try:
# connection usage
finally:
conn.close()
.. index:: .. index::