work
[p2pool.git] / p2pool / 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         return self._db.execute('SELECT COUNT(key) FROM %s' % (self._table,)).fetchone()[0]
12     
13     def __iter__(self):
14         for row in self._db.execute('SELECT key FROM %s' % (self._table,)):
15             yield str(row[0])
16     def iterkeys(self):
17         return iter(self)
18     def keys(self):
19         return list(self)
20     
21     def itervalues(self):
22         for row in self._db.execute('SELECT value FROM %s' % (self._table,)):
23             yield str(row[0])
24     def values(self):
25         return list(self.itervalues)
26     
27     def iteritems(self):
28         for row in self._db.execute('SELECT key, value FROM %s' % (self._table,)):
29             yield (str(row[0]), str(row[1]))
30     def items(self):
31         return list(self.iteritems())
32     
33     def __setitem__(self, key, value):
34         self._db.execute('INSERT OR REPLACE INTO %s (key, value) VALUES (?, ?)' % (self._table,), (buffer(key), buffer(value)))
35     
36     def __getitem__(self, key):
37         row = self._db.execute('SELECT value FROM %s WHERE key=?' % (self._table,), (buffer(key),)).fetchone()
38         if row is None:
39             raise KeyError(key)
40         else:
41             return str(row[0])
42     
43     def __delitem__(self, key):
44         self._db.execute('DELETE FROM %s WHERE key=?' % (self._table,), (buffer(key),))