diff options
author | Erlend E. Aasland <erlend.aasland@innova.no> | 2022-08-22 08:03:24 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-22 08:03:24 (GMT) |
commit | 18b1782192f85bd26db89f5bc850f8bee4247c1a (patch) | |
tree | b326e154ce4863047482b43605f7b0ffc31cdd5c | |
parent | 53e6a9a7254bdcd0538580ba7d799cd453e2dca5 (diff) | |
download | cpython-18b1782192f85bd26db89f5bc850f8bee4247c1a.zip cpython-18b1782192f85bd26db89f5bc850f8bee4247c1a.tar.gz cpython-18b1782192f85bd26db89f5bc850f8bee4247c1a.tar.bz2 |
gh-96121: Merge sqlite3.Row examples into sqlite3.Row class doc (#96122)
Co-authored-by: Ezio Melotti <ezio.melotti@gmail.com>
Co-authored-by: C.A.M. Gerlach <CAM.Gerlach@Gerlach.CAM>
-rw-r--r-- | Doc/includes/sqlite3/rowclass.py | 14 | ||||
-rw-r--r-- | Doc/library/sqlite3.rst | 74 |
2 files changed, 18 insertions, 70 deletions
diff --git a/Doc/includes/sqlite3/rowclass.py b/Doc/includes/sqlite3/rowclass.py deleted file mode 100644 index fc60287..0000000 --- a/Doc/includes/sqlite3/rowclass.py +++ /dev/null @@ -1,14 +0,0 @@ -import sqlite3 - -con = sqlite3.connect(":memory:") -con.row_factory = sqlite3.Row - -cur = con.cursor() -cur.execute("select 'John' as name, 42 as age") -for row in cur: - assert row[0] == row["name"] - assert row["name"] == row["nAmE"] - assert row[1] == row["age"] - assert row[1] == row["AgE"] - -con.close() diff --git a/Doc/library/sqlite3.rst b/Doc/library/sqlite3.rst index 6413d88..0d1185d 100644 --- a/Doc/library/sqlite3.rst +++ b/Doc/library/sqlite3.rst @@ -207,7 +207,6 @@ inserted data and retrieved values from it in multiple ways. * :ref:`sqlite3-placeholders` * :ref:`sqlite3-adapters` * :ref:`sqlite3-converters` - * :ref:`sqlite3-columns-by-name` * :ref:`sqlite3-connection-context-manager` * :ref:`sqlite3-explanation` for in-depth background on transaction control. @@ -1255,6 +1254,11 @@ Cursor objects >>> cur.connection == con True +.. The sqlite3.Row example used to be a how-to. It has now been incorporated + into the Row reference. We keep the anchor here in order not to break + existing links. + +.. _sqlite3-columns-by-name: .. _sqlite3-row-objects: Row objects @@ -1262,10 +1266,9 @@ Row objects .. class:: Row - A :class:`Row` instance serves as a highly optimized + A :class:`!Row` instance serves as a highly optimized :attr:`~Connection.row_factory` for :class:`Connection` objects. - It tries to mimic a :class:`tuple` in most of its features, - and supports iteration, :func:`repr`, equality testing, :func:`len`, + It supports iteration, equality testing, :func:`len`, and :term:`mapping` access by column name and index. Two row objects compare equal if have equal columns and equal members. @@ -1279,45 +1282,18 @@ Row objects .. versionchanged:: 3.5 Added support of slicing. -Let's assume we initialize a table as in the example given above:: + Example:: - con = sqlite3.connect(":memory:") - cur = con.cursor() - cur.execute('''create table stocks - (date text, trans text, symbol text, - qty real, price real)''') - cur.execute("""insert into stocks - values ('2006-01-05','BUY','RHAT',100,35.14)""") - con.commit() - cur.close() - -Now we plug :class:`Row` in:: - - >>> con.row_factory = sqlite3.Row - >>> cur = con.cursor() - >>> cur.execute('select * from stocks') - <sqlite3.Cursor object at 0x7f4e7dd8fa80> - >>> r = cur.fetchone() - >>> type(r) - <class 'sqlite3.Row'> - >>> tuple(r) - ('2006-01-05', 'BUY', 'RHAT', 100.0, 35.14) - >>> len(r) - 5 - >>> r[2] - 'RHAT' - >>> r.keys() - ['date', 'trans', 'symbol', 'qty', 'price'] - >>> r['qty'] - 100.0 - >>> for member in r: - ... print(member) - ... - 2006-01-05 - BUY - RHAT - 100.0 - 35.14 + >>> con = sqlite3.connect(":memory:") + >>> con.row_factory = sqlite3.Row + >>> res = con.execute("SELECT 'Earth' AS name, 6378 AS radius") + >>> row = res.fetchone() + >>> row.keys() + ['name', 'radius'] + >>> row[0], row["name"] # Access by index and name. + ('Earth', 'Earth') + >>> row["RADIUS"] # Column names are case-insensitive. + 6378 .. _sqlite3-blob-objects: @@ -1766,20 +1742,6 @@ directly using only a single call on the :class:`Connection` object. .. literalinclude:: ../includes/sqlite3/shortcut_methods.py -.. _sqlite3-columns-by-name: - -Accessing columns by name instead of by index -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -One useful feature of the :mod:`!sqlite3` module is the built-in -:class:`sqlite3.Row` class designed to be used as a row factory. - -Rows wrapped with this class can be accessed both by index (like tuples) and -case-insensitively by name: - -.. literalinclude:: ../includes/sqlite3/rowclass.py - - .. _sqlite3-connection-context-manager: Using the connection as a context manager |