@@ -570,103 +570,6 @@ Connection objects
570
570
571
571
An SQLite database connection has the following attributes and methods:
572
572
573
- .. attribute :: isolation_level
574
-
575
- This attribute controls the :ref: `transaction handling
576
- <sqlite3-controlling-transactions>` performed by :mod: `!sqlite3 `.
577
- If set to ``None ``, transactions are never implicitly opened.
578
- If set to one of ``"DEFERRED" ``, ``"IMMEDIATE" ``, or ``"EXCLUSIVE" ``,
579
- corresponding to the underlying `SQLite transaction behaviour `_,
580
- implicit :ref: `transaction management
581
- <sqlite3-controlling-transactions>` is performed.
582
-
583
- If not overridden by the *isolation_level * parameter of :func: `connect `,
584
- the default is ``"" ``, which is an alias for ``"DEFERRED" ``.
585
-
586
- .. attribute :: in_transaction
587
-
588
- This read-only attribute corresponds to the low-level SQLite
589
- `autocommit mode `_.
590
-
591
- ``True `` if a transaction is active (there are uncommitted changes),
592
- ``False `` otherwise.
593
-
594
- .. versionadded :: 3.2
595
-
596
- .. attribute :: row_factory
597
-
598
- A callable that accepts two arguments,
599
- a :class: `Cursor ` object and the raw row results as a :class: `tuple `,
600
- and returns a custom object representing an SQLite row.
601
-
602
- Example:
603
-
604
- .. doctest ::
605
-
606
- >>> def dict_factory (cursor , row ):
607
- ... col_names = [col[0 ] for col in cursor.description]
608
- ... return {key: value for key, value in zip (col_names, row)}
609
- >>> con = sqlite3.connect(" :memory:" )
610
- >>> con.row_factory = dict_factory
611
- >>> for row in con.execute(" SELECT 1 AS a, 2 AS b" ):
612
- ... print (row)
613
- {'a': 1, 'b': 2}
614
-
615
- If returning a tuple doesn't suffice and you want name-based access to
616
- columns, you should consider setting :attr: `row_factory ` to the
617
- highly optimized :class: `sqlite3.Row ` type. :class: `Row ` provides both
618
- index-based and case-insensitive name-based access to columns with almost no
619
- memory overhead. It will probably be better than your own custom
620
- dictionary-based approach or even a db_row based solution.
621
-
622
- .. XXX what's a db_row-based solution?
623
-
624
- .. attribute :: text_factory
625
-
626
- A callable that accepts a :class: `bytes ` parameter and returns a text
627
- representation of it.
628
- The callable is invoked for SQLite values with the ``TEXT `` data type.
629
- By default, this attribute is set to :class: `str `.
630
- If you want to return ``bytes `` instead, set *text_factory * to ``bytes ``.
631
-
632
- Example:
633
-
634
- .. testcode ::
635
-
636
- con = sqlite3.connect(":memory: ")
637
- cur = con.cursor()
638
-
639
- AUSTRIA = "Österreich"
640
-
641
- # by default, rows are returned as str
642
- cur.execute("SELECT ?", (AUSTRIA,))
643
- row = cur.fetchone()
644
- assert row[0] == AUSTRIA
645
-
646
- # but we can make sqlite3 always return bytestrings ...
647
- con.text_factory = bytes
648
- cur.execute("SELECT ?", (AUSTRIA,))
649
- row = cur.fetchone()
650
- assert type(row[0]) is bytes
651
- # the bytestrings will be encoded in UTF-8, unless you stored garbage in the
652
- # database ...
653
- assert row[0] == AUSTRIA.encode("utf-8")
654
-
655
- # we can also implement a custom text_factory ...
656
- # here we implement one that appends "foo" to all strings
657
- con.text_factory = lambda x: x.decode("utf-8") + "foo"
658
- cur.execute("SELECT ?", ("bar",))
659
- row = cur.fetchone()
660
- assert row[0] == "barfoo"
661
-
662
- con.close()
663
-
664
- .. attribute :: total_changes
665
-
666
- Return the total number of database rows that have been modified, inserted, or
667
- deleted since the database connection was opened.
668
-
669
-
670
573
.. method :: cursor(factory=Cursor)
671
574
672
575
Create and return a :class: `Cursor ` object.
@@ -1320,6 +1223,102 @@ Connection objects
1320
1223
1321
1224
.. versionadded :: 3.11
1322
1225
1226
+ .. attribute :: in_transaction
1227
+
1228
+ This read-only attribute corresponds to the low-level SQLite
1229
+ `autocommit mode `_.
1230
+
1231
+ ``True `` if a transaction is active (there are uncommitted changes),
1232
+ ``False `` otherwise.
1233
+
1234
+ .. versionadded :: 3.2
1235
+
1236
+ .. attribute :: isolation_level
1237
+
1238
+ This attribute controls the :ref: `transaction handling
1239
+ <sqlite3-controlling-transactions>` performed by :mod: `!sqlite3 `.
1240
+ If set to ``None ``, transactions are never implicitly opened.
1241
+ If set to one of ``"DEFERRED" ``, ``"IMMEDIATE" ``, or ``"EXCLUSIVE" ``,
1242
+ corresponding to the underlying `SQLite transaction behaviour `_,
1243
+ implicit :ref: `transaction management
1244
+ <sqlite3-controlling-transactions>` is performed.
1245
+
1246
+ If not overridden by the *isolation_level * parameter of :func: `connect `,
1247
+ the default is ``"" ``, which is an alias for ``"DEFERRED" ``.
1248
+
1249
+ .. attribute :: row_factory
1250
+
1251
+ A callable that accepts two arguments,
1252
+ a :class: `Cursor ` object and the raw row results as a :class: `tuple `,
1253
+ and returns a custom object representing an SQLite row.
1254
+
1255
+ Example:
1256
+
1257
+ .. doctest ::
1258
+
1259
+ >>> def dict_factory (cursor , row ):
1260
+ ... col_names = [col[0 ] for col in cursor.description]
1261
+ ... return {key: value for key, value in zip (col_names, row)}
1262
+ >>> con = sqlite3.connect(" :memory:" )
1263
+ >>> con.row_factory = dict_factory
1264
+ >>> for row in con.execute(" SELECT 1 AS a, 2 AS b" ):
1265
+ ... print (row)
1266
+ {'a': 1, 'b': 2}
1267
+
1268
+ If returning a tuple doesn't suffice and you want name-based access to
1269
+ columns, you should consider setting :attr: `row_factory ` to the
1270
+ highly optimized :class: `sqlite3.Row ` type. :class: `Row ` provides both
1271
+ index-based and case-insensitive name-based access to columns with almost no
1272
+ memory overhead. It will probably be better than your own custom
1273
+ dictionary-based approach or even a db_row based solution.
1274
+
1275
+ .. XXX what's a db_row-based solution?
1276
+
1277
+ .. attribute :: text_factory
1278
+
1279
+ A callable that accepts a :class: `bytes ` parameter and returns a text
1280
+ representation of it.
1281
+ The callable is invoked for SQLite values with the ``TEXT `` data type.
1282
+ By default, this attribute is set to :class: `str `.
1283
+ If you want to return ``bytes `` instead, set *text_factory * to ``bytes ``.
1284
+
1285
+ Example:
1286
+
1287
+ .. testcode ::
1288
+
1289
+ con = sqlite3.connect(":memory: ")
1290
+ cur = con.cursor()
1291
+
1292
+ AUSTRIA = "Österreich"
1293
+
1294
+ # by default, rows are returned as str
1295
+ cur.execute("SELECT ?", (AUSTRIA,))
1296
+ row = cur.fetchone()
1297
+ assert row[0] == AUSTRIA
1298
+
1299
+ # but we can make sqlite3 always return bytestrings ...
1300
+ con.text_factory = bytes
1301
+ cur.execute("SELECT ?", (AUSTRIA,))
1302
+ row = cur.fetchone()
1303
+ assert type(row[0]) is bytes
1304
+ # the bytestrings will be encoded in UTF-8, unless you stored garbage in the
1305
+ # database ...
1306
+ assert row[0] == AUSTRIA.encode("utf-8")
1307
+
1308
+ # we can also implement a custom text_factory ...
1309
+ # here we implement one that appends "foo" to all strings
1310
+ con.text_factory = lambda x: x.decode("utf-8") + "foo"
1311
+ cur.execute("SELECT ?", ("bar",))
1312
+ row = cur.fetchone()
1313
+ assert row[0] == "barfoo"
1314
+
1315
+ con.close()
1316
+
1317
+ .. attribute :: total_changes
1318
+
1319
+ Return the total number of database rows that have been modified, inserted, or
1320
+ deleted since the database connection was opened.
1321
+
1323
1322
1324
1323
.. _sqlite3-cursor-objects :
1325
1324
0 commit comments