When using the sqlite3.Row object as a row factory, one can access the resulting rows by index (such as row) or by name (such as row['b']). However, the slice functionality is lost, as doing row[0:2] raises the error:
"slices not implemented, yet"
Here is a patch that fixes this, I implemented it and I added the corresponding unit test.
/home/antoine/cpython/default/Modules/_sqlite/row.c: In function ‘pysqlite_row_subscript’:
/home/antoine/cpython/default/Modules/_sqlite/row.c:128:26: attention : passing argument 1 of ‘PySlice_GetIndicesEx’ from incompatible pointer type
you can use assertEqual to avoid defining the error message yourself
I updated the patch to address the compiler warning and use assertEqual.
While testing, I noticed that slicing with steps wasn't supported, so I expanded the sqlite3.Row slicing code to support steps, and added some additional tests.
The slicing code in Modules/_sqlite/row.c:pysqlite_row_subscript is unfortunately pretty redundant with the slicing code in Objects/tupleobject.c. It'd be better to either be able to factor the code from both into a function (but I couldn't see how to do this without making it part of the public API), or have tuple, sqlite.Row, etc. implement a shared slicing interface. Perhaps we should defer that decision to a future ticket, though.
Note that even after this patch, sqlite.Row instances don't support negative indices.