Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Hi,
I think it would be great if cursors could be used as context managers as well. They acquire a limiting resource: Read locks on the database file. In a multi-threaded or multi-process situation, it is important to not rely on (unreliable) garbage collection to mop up any old, open, unused cursors. In such a case, it is easy to end up with 'OperationalError: database is locked' errors on any process attempting to write.
This adds code to use cursors as context managers, like there is already for connections. Included is a simple test case (passes fine on python 2.7.6) and documentation of these methods.
But as a further suggestion, the docs might become more helpful if they would state this problem more clearly. Currently, the code examples do not deal with this problem and implicitly suggest the assumption that Python's garbage collection is sufficient and so implicitly assume a read-only or a single-threaded use-case of pysqlite.