I am doing something like this...
conn = sqlite3.connect(db_filename)
with conn:
cur = conn.cursor()
cur.execute( ... )
with
automatically commits the changes. But the docs say nothing about closing the connection.
Actually I can use conn
in later statements (which I have tested). Hence it seems that the context manager is not closing the connection.
Do I have to manually close the connection. What if I leave it open?
EDIT
My findings:
- The connection is not closed in the context manager, I have tested and confirmed it. Upon
__exit__
, the context manager only commits the changes by doingconn.commit()
with conn
andwith sqlite3.connect(db_filename) as conn
are same, so using either will still keep the connection alivewith
statement does not create a new scope, hence all the variables created inside the suite of with will be accessible outside it- Finally, you should close the connection manually