Choosing the right database-system for a small project

Gerhard Häring gh at ghaering.de
Tue Jun 24 17:38:39 EDT 2003


Thomas Weholt wrote:
> Ok, I'm going to do some more testing on both MetaKit and SQLite, but I'd
> like to know of any trouble I might run into with concurrent writes or reads
> to the database. This will be used on a webserver, not with heavy load, but
> to be sure it would be nice to have at least some simple locking mechanism.
> 
> Any tips?

I can only speak for PySQLite.

SQLite does the necessary locking automatically, and the locking 
behaviour is also configurable.

PySQLite uses transactions by default, and while you're in a 
transaction, SQLite locks the *whole* database. Depending on your app 
not using transactions might be an option, if perhaps only for reading.

To disable transactions, use autocommit=1 in the connect call:

cx = sqlite.connect(database="/path/to/db", autocommit=1)

Now if you use transactions (default behaviour), as I said SQLite locks 
the whole database while in a transaction. So be sure to commit or 
rollback as soon as you can.

In the case where you try to access the database while it is locked, you 
will by default get a DatabaseError exception thrown at you. That's 
probaly not what you want :-)

So you can tell SQLite how long to wait for the lock to go away. This

cx = sqlite.connect(database="path/to/db", timeout=5000)

will wait 5 seconds for any lock to go away before throwing an Exception 
at you.

-- Gerhard





More information about the Python-list mailing list