* :ref:`sqlite3-connection-shortcuts`
* :ref:`sqlite3-connection-context-manager`
+
+ .. versionchanged:: 3.13
+
+ A :exc:`ResourceWarning` is emitted if :meth:`close` is not called before
+ a :class:`!Connection` object is deleted.
+
An SQLite database connection has the following attributes and methods:
.. method:: cursor(factory=Cursor)
:meth:`~pathlib.Path.is_dir`.
(Contributed by Barney Gale in :gh:`77609` and :gh:`105793`.)
+sqlite3
+-------
+
+* A :exc:`ResourceWarning` is now emitted if a :class:`sqlite3.Connection`
+ object is not :meth:`closed <sqlite3.Connection.close>` explicitly.
+ (Contributed by Erlend E. Aasland in :gh:`105539`.)
+
tkinter
-------
cx.close()
self.assertEqual(cm.filename, __file__)
+ def test_connection_resource_warning(self):
+ with self.assertWarns(ResourceWarning):
+ cx = sqlite.connect(":memory:")
+ del cx
+ gc_collect()
+
class UninitialisedConnectionTests(unittest.TestCase):
def setUp(self):
--- /dev/null
+:mod:`sqlite3` now emits an :exc:`ResourceWarning` if a
+:class:`sqlite3.Connection` object is not :meth:`closed
+<sqlite3.connection.close>` explicitly. Patch by Erlend E. Aasland.
}
/* Clean up if user has not called .close() explicitly. */
+ if (con->db) {
+ if (PyErr_ResourceWarning(self, 1, "unclosed database in %R", self)) {
+ /* Spurious errors can appear at shutdown */
+ if (PyErr_ExceptionMatches(PyExc_Warning)) {
+ PyErr_WriteUnraisable(self);
+ }
+ }
+ }
if (connection_close(con) < 0) {
if (teardown) {
PyErr_Clear();