sqlite oops
authorforrest <forrest@470744a7-cac9-478e-843e-5ec1b25c69e8>
Thu, 16 Jun 2011 16:00:31 +0000 (16:00 +0000)
committerforrest <forrest@470744a7-cac9-478e-843e-5ec1b25c69e8>
Thu, 16 Jun 2011 16:00:31 +0000 (16:00 +0000)
git-svn-id: svn://forre.st/p2pool@1345 470744a7-cac9-478e-843e-5ec1b25c69e8

db.py [new file with mode: 0644]

diff --git a/db.py b/db.py
new file mode 100644 (file)
index 0000000..b2a57c1
--- /dev/null
+++ b/db.py
@@ -0,0 +1,48 @@
+from __future__ import division
+
+class SQLiteDict(object):
+    def __init__(self, db, table):
+        self._db = db
+        self._table = table
+        
+        self._db.execute('CREATE TABLE IF NOT EXISTS %s(key BLOB PRIMARY KEY NOT NULL, value BLOB NOT NULL)' % (self._table,))
+    
+    def __len__(self):
+        for row in self._db.execute("SELECT COUNT(key) FROM %s" % (self._table,)):
+            return row[0]
+    
+    def __iter__(self):
+        for row in self._db.execute("SELECT key FROM %s" % (self._table,)):
+            yield str(row[0])
+    def iterkeys(self):
+        return iter(self)
+    def keys(self):
+        return list(self)
+    
+    def itervalues(self):
+        for row in self._db.execute("SELECT value FROM %s" % (self._table,)):
+            yield str(row[0])
+    def values(self):
+        return list(self.itervalues)
+    
+    def iteritems(self):
+        for row in self._db.execute("SELECT key, value FROM %s" % (self._table,)):
+            yield (str(row[0]), str(row[1]))
+    def items(self):
+        return list(self.iteritems())
+    
+    def __setitem__(self, key, value):
+        if self._db.execute("SELECT key FROM %s where key=?" % (self._table,), (buffer(key),)).fetchone() is None:
+            self._db.execute('INSERT INTO %s (key, value) VALUES (?, ?)' % (self._table,), (buffer(key), buffer(value)))
+        else:
+            self._db.execute('UPDATE %s SET value=? WHERE key=?' % (self._table,), (buffer(value), buffer(key)))
+    
+    def __getitem__(self, key):
+        row = self._db.execute('SELECT value FROM %s WHERE key=?' % (self._table,), (buffer(key),)).fetchone()
+        if row is None:
+            raise KeyError(key)
+        else:
+            return str(row[0])
+    
+    def __delitem__(self, key):
+        self._db.execute("DELETE FROM %s WHERE key=?" % (self._table,), (buffer(key),))