On 22/02/2015 18:41, Mario Figueiredo wrote:
On Sat, 21 Feb 2015 12:22:58 +0000, Mark Lawrence
<breamore...@yahoo.co.uk> wrote:


Use your context manager at the outer level.

import sqlite3 as lite

try:
     with lite.connect('data.db') as db:
     try:
         db.execute(sql, parms)
     except lite.IntegrityError:
         raise ValueError('invalid data')
except lite.DatabaseError:
     raise OSError('database file corrupt or not found.')

The sqlite context manager doesn't close a database connection on
exit. It only ensures, commits and rollbacks are performed.


Where in the documentation does it state that? If it does, it certainly breaks my expectations, as I understood the whole point of Python context managers is to do the tidying up for you. Or have you misread what it says here https://docs.python.org/3/library/sqlite3.html#using-the-connection-as-a-context-manager ?

>>> import sqlite3
>>> with sqlite3.connect(r'C:\Users\Mark\Documents\Cash\Data\cash.sqlite') as db:
...     db.execute('select count(*) from accounts')
...
<sqlite3.Cursor object at 0x00000000032C70A0>
>>> db.close()
>>>

Looks like you're correct.  Knock me down with a feather, Clevor Trevor.

--
My fellow Pythonistas, ask not what our language can do for you, ask
what you can do for our language.

Mark Lawrence

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to