Skip to content

Commit 99f5568

Browse files
miss-islingtonerlend-aasland
authored andcommitted
gh-96702: Order methods before attrs in sqlite3.Connection docs (GH-96703) (#96788)
(cherry picked from commit 49cceeb) Co-authored-by: Erlend E. Aasland <erlend.aasland@protonmail.com> Co-authored-by: Erlend E. Aasland <erlend.aasland@protonmail.com>
1 parent 746dad4 commit 99f5568

File tree

1 file changed

+96
-97
lines changed

1 file changed

+96
-97
lines changed

Doc/library/sqlite3.rst

+96-97
Original file line numberDiff line numberDiff line change
@@ -557,103 +557,6 @@ Connection objects
557557

558558
An SQLite database connection has the following attributes and methods:
559559

560-
.. attribute:: isolation_level
561-
562-
This attribute controls the :ref:`transaction handling
563-
<sqlite3-controlling-transactions>` performed by :mod:`!sqlite3`.
564-
If set to ``None``, transactions are never implicitly opened.
565-
If set to one of ``"DEFERRED"``, ``"IMMEDIATE"``, or ``"EXCLUSIVE"``,
566-
corresponding to the underlying `SQLite transaction behaviour`_,
567-
implicit :ref:`transaction management
568-
<sqlite3-controlling-transactions>` is performed.
569-
570-
If not overridden by the *isolation_level* parameter of :func:`connect`,
571-
the default is ``""``, which is an alias for ``"DEFERRED"``.
572-
573-
.. attribute:: in_transaction
574-
575-
This read-only attribute corresponds to the low-level SQLite
576-
`autocommit mode`_.
577-
578-
``True`` if a transaction is active (there are uncommitted changes),
579-
``False`` otherwise.
580-
581-
.. versionadded:: 3.2
582-
583-
.. attribute:: row_factory
584-
585-
A callable that accepts two arguments,
586-
a :class:`Cursor` object and the raw row results as a :class:`tuple`,
587-
and returns a custom object representing an SQLite row.
588-
589-
Example:
590-
591-
.. doctest::
592-
593-
>>> def dict_factory(cursor, row):
594-
... col_names = [col[0] for col in cursor.description]
595-
... return {key: value for key, value in zip(col_names, row)}
596-
>>> con = sqlite3.connect(":memory:")
597-
>>> con.row_factory = dict_factory
598-
>>> for row in con.execute("SELECT 1 AS a, 2 AS b"):
599-
... print(row)
600-
{'a': 1, 'b': 2}
601-
602-
If returning a tuple doesn't suffice and you want name-based access to
603-
columns, you should consider setting :attr:`row_factory` to the
604-
highly optimized :class:`sqlite3.Row` type. :class:`Row` provides both
605-
index-based and case-insensitive name-based access to columns with almost no
606-
memory overhead. It will probably be better than your own custom
607-
dictionary-based approach or even a db_row based solution.
608-
609-
.. XXX what's a db_row-based solution?
610-
611-
.. attribute:: text_factory
612-
613-
A callable that accepts a :class:`bytes` parameter and returns a text
614-
representation of it.
615-
The callable is invoked for SQLite values with the ``TEXT`` data type.
616-
By default, this attribute is set to :class:`str`.
617-
If you want to return ``bytes`` instead, set *text_factory* to ``bytes``.
618-
619-
Example:
620-
621-
.. testcode::
622-
623-
con = sqlite3.connect(":memory:")
624-
cur = con.cursor()
625-
626-
AUSTRIA = "Österreich"
627-
628-
# by default, rows are returned as str
629-
cur.execute("SELECT ?", (AUSTRIA,))
630-
row = cur.fetchone()
631-
assert row[0] == AUSTRIA
632-
633-
# but we can make sqlite3 always return bytestrings ...
634-
con.text_factory = bytes
635-
cur.execute("SELECT ?", (AUSTRIA,))
636-
row = cur.fetchone()
637-
assert type(row[0]) is bytes
638-
# the bytestrings will be encoded in UTF-8, unless you stored garbage in the
639-
# database ...
640-
assert row[0] == AUSTRIA.encode("utf-8")
641-
642-
# we can also implement a custom text_factory ...
643-
# here we implement one that appends "foo" to all strings
644-
con.text_factory = lambda x: x.decode("utf-8") + "foo"
645-
cur.execute("SELECT ?", ("bar",))
646-
row = cur.fetchone()
647-
assert row[0] == "barfoo"
648-
649-
con.close()
650-
651-
.. attribute:: total_changes
652-
653-
Return the total number of database rows that have been modified, inserted, or
654-
deleted since the database connection was opened.
655-
656-
657560
.. method:: cursor(factory=Cursor)
658561

659562
Create and return a :class:`Cursor` object.
@@ -1307,6 +1210,102 @@ Connection objects
13071210

13081211
.. versionadded:: 3.11
13091212

1213+
.. attribute:: in_transaction
1214+
1215+
This read-only attribute corresponds to the low-level SQLite
1216+
`autocommit mode`_.
1217+
1218+
``True`` if a transaction is active (there are uncommitted changes),
1219+
``False`` otherwise.
1220+
1221+
.. versionadded:: 3.2
1222+
1223+
.. attribute:: isolation_level
1224+
1225+
This attribute controls the :ref:`transaction handling
1226+
<sqlite3-controlling-transactions>` performed by :mod:`!sqlite3`.
1227+
If set to ``None``, transactions are never implicitly opened.
1228+
If set to one of ``"DEFERRED"``, ``"IMMEDIATE"``, or ``"EXCLUSIVE"``,
1229+
corresponding to the underlying `SQLite transaction behaviour`_,
1230+
implicit :ref:`transaction management
1231+
<sqlite3-controlling-transactions>` is performed.
1232+
1233+
If not overridden by the *isolation_level* parameter of :func:`connect`,
1234+
the default is ``""``, which is an alias for ``"DEFERRED"``.
1235+
1236+
.. attribute:: row_factory
1237+
1238+
A callable that accepts two arguments,
1239+
a :class:`Cursor` object and the raw row results as a :class:`tuple`,
1240+
and returns a custom object representing an SQLite row.
1241+
1242+
Example:
1243+
1244+
.. doctest::
1245+
1246+
>>> def dict_factory(cursor, row):
1247+
... col_names = [col[0] for col in cursor.description]
1248+
... return {key: value for key, value in zip(col_names, row)}
1249+
>>> con = sqlite3.connect(":memory:")
1250+
>>> con.row_factory = dict_factory
1251+
>>> for row in con.execute("SELECT 1 AS a, 2 AS b"):
1252+
... print(row)
1253+
{'a': 1, 'b': 2}
1254+
1255+
If returning a tuple doesn't suffice and you want name-based access to
1256+
columns, you should consider setting :attr:`row_factory` to the
1257+
highly optimized :class:`sqlite3.Row` type. :class:`Row` provides both
1258+
index-based and case-insensitive name-based access to columns with almost no
1259+
memory overhead. It will probably be better than your own custom
1260+
dictionary-based approach or even a db_row based solution.
1261+
1262+
.. XXX what's a db_row-based solution?
1263+
1264+
.. attribute:: text_factory
1265+
1266+
A callable that accepts a :class:`bytes` parameter and returns a text
1267+
representation of it.
1268+
The callable is invoked for SQLite values with the ``TEXT`` data type.
1269+
By default, this attribute is set to :class:`str`.
1270+
If you want to return ``bytes`` instead, set *text_factory* to ``bytes``.
1271+
1272+
Example:
1273+
1274+
.. testcode::
1275+
1276+
con = sqlite3.connect(":memory:")
1277+
cur = con.cursor()
1278+
1279+
AUSTRIA = "Österreich"
1280+
1281+
# by default, rows are returned as str
1282+
cur.execute("SELECT ?", (AUSTRIA,))
1283+
row = cur.fetchone()
1284+
assert row[0] == AUSTRIA
1285+
1286+
# but we can make sqlite3 always return bytestrings ...
1287+
con.text_factory = bytes
1288+
cur.execute("SELECT ?", (AUSTRIA,))
1289+
row = cur.fetchone()
1290+
assert type(row[0]) is bytes
1291+
# the bytestrings will be encoded in UTF-8, unless you stored garbage in the
1292+
# database ...
1293+
assert row[0] == AUSTRIA.encode("utf-8")
1294+
1295+
# we can also implement a custom text_factory ...
1296+
# here we implement one that appends "foo" to all strings
1297+
con.text_factory = lambda x: x.decode("utf-8") + "foo"
1298+
cur.execute("SELECT ?", ("bar",))
1299+
row = cur.fetchone()
1300+
assert row[0] == "barfoo"
1301+
1302+
con.close()
1303+
1304+
.. attribute:: total_changes
1305+
1306+
Return the total number of database rows that have been modified, inserted, or
1307+
deleted since the database connection was opened.
1308+
13101309

13111310
.. _sqlite3-cursor-objects:
13121311

0 commit comments

Comments
 (0)