diff --git a/hexlib/db.py b/hexlib/db.py index 11e964a..58093ff 100644 --- a/hexlib/db.py +++ b/hexlib/db.py @@ -90,6 +90,16 @@ class Table: self._state = state self._table = table + def sql(self, where_clause, *params): + with sqlite3.connect(self._state.dbfile, **self._state.dbargs) as conn: + conn.row_factory = sqlite3.Row + try: + cur = conn.execute("SELECT * FROM %s %s" % (self._table, where_clause), params) + for row in cur: + yield dict(row) + except: + return None + def __iter__(self): with sqlite3.connect(self._state.dbfile, **self._state.dbargs) as conn: conn.row_factory = sqlite3.Row diff --git a/setup.py b/setup.py index de9322b..3c2d59d 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup setup( name="hexlib", - version="1.23", + version="1.24", description="Misc utility methods", author="simon987", author_email="me@simon987.net", diff --git a/test/test_PersistantState.py b/test/test_PersistantState.py index 6e0ab56..9dc8801 100644 --- a/test/test_PersistantState.py +++ b/test/test_PersistantState.py @@ -75,3 +75,14 @@ class TestPersistentState(TestCase): val["id"] = 1 self.assertDictEqual(val, s["a"][1]) + + def test_sql(self): + s = PersistentState() + + s["a"][1] = {"a": True} + s["a"][2] = {"a": False} + s["a"][3] = {"a": True} + + items = list(s["a"].sql("WHERE a=0 ORDER BY id")) + + self.assertDictEqual(items[0], s["a"][2])