setup.py
[p2pool.git] / db.py
1 from __future__ import division
2
3 class SQLiteDict(object):
4     def __init__(self, db, table):
5         self._db = db
6         self._table = table
7         
8         self._db.execute('CREATE TABLE IF NOT EXISTS %s(key BLOB PRIMARY KEY NOT NULL, value BLOB NOT NULL)' % (self._table,))
9     
10     def __len__(self):
11         for row in self._db.execute('SELECT COUNT(key) FROM %s' % (self._table,)):
12             return row[0]
13     
14     def __iter__(self):
15         for row in self._db.execute('SELECT key FROM %s' % (self._table,)):
16             yield str(row[0])
17     def iterkeys(self):
18         return iter(self)
19     def keys(self):
20         return list(self)
21     
22     def itervalues(self):
23         for row in self._db.execute('SELECT value FROM %s' % (self._table,)):
24             yield str(row[0])
25     def values(self):
26         return list(self.itervalues)
27     
28     def iteritems(self):
29         for row in self._db.execute('SELECT key, value FROM %s' % (self._table,)):
30             yield (str(row[0]), str(row[1]))
31     def items(self):
32         return list(self.iteritems())
33     
34     def __setitem__(self, key, value):
35         if self._db.execute('SELECT key FROM %s where key=?' % (self._table,), (buffer(key),)).fetchone() is None:
36             self._db.execute('INSERT INTO %s (key, value) VALUES (?, ?)' % (self._table,), (buffer(key), buffer(value)))
37         else:
38             self._db.execute('UPDATE %s SET value=? WHERE key=?' % (self._table,), (buffer(value), buffer(key)))
39     
40     def __getitem__(self, key):
41         row = self._db.execute('SELECT value FROM %s WHERE key=?' % (self._table,), (buffer(key),)).fetchone()
42         if row is None:
43             raise KeyError(key)
44         else:
45             return str(row[0])
46     
47     def __delitem__(self, key):
48         self._db.execute('DELETE FROM %s WHERE key=?' % (self._table,), (buffer(key),))