diff options
author | Asko Oja | 2010-11-10 23:02:10 +0000 |
---|---|---|
committer | Asko Oja | 2010-11-10 23:02:10 +0000 |
commit | e4dcfa4d1903e8873348865787348a4d612c71eb (patch) | |
tree | b9d3c754feef4fb0a3edc17acea9592ecab4d9b7 | |
parent | 30d9122d6e1adff03dea69cf98a4d5dc6077b5d7 (diff) |
helper functions added into querybuilder
-rwxr-xr-x | python/skytools/querybuilder.py | 54 |
1 files changed, 52 insertions, 2 deletions
diff --git a/python/skytools/querybuilder.py b/python/skytools/querybuilder.py index a63b4aca..db168481 100755 --- a/python/skytools/querybuilder.py +++ b/python/skytools/querybuilder.py @@ -1,6 +1,5 @@ #! /usr/bin/env python - """Helper classes for complex query generation. Main target is code execution under PL/Python. @@ -16,7 +15,10 @@ See L{plpy_exec} for examples. from skytools.sqltools import dbdict from skytools.quoting import quote_literal -__all__ = ['QueryBuilder', 'PLPyQueryBuilder', 'PLPyQuery', 'plpy_exec'] +__all__ = [ + 'QueryBuilder', 'PLPyQueryBuilder', 'PLPyQuery', 'plpy_exec', + "run_query", "run_query_row", "run_lookup", "run_exists", +] # make plpy available try: @@ -366,6 +368,54 @@ class fake_plpy: def error(self, msg): print "DBG: plpy.error(%s)" % repr(msg) +# some helper functions for convenient sql execution + +def run_query(cur, sql, params = None, **kvargs): + """ Helper function if everything you need is just paramertisized execute + Sets rows_found that is coneninet to use when you don't need result just + want to know how many rows were affected + """ + params = params or kvargs + sql = QueryBuilder(sql, params).get_sql(0) + cur.execute(sql) + rows = cur.dictfetchall() + # convert result rows to dbdict + if rows: + rows = [dbdict(r) for r in rows] + return rows + +def run_query_row(cur, sql, params = None, **kvargs): + """ Helper function if everything you need is just paramertisized execute to + fetch one row only. If not found none is returned + """ + params = params or kvargs + rows = run_query(cur, sql, params) + if len(rows) == 0: + return None + return rows[0] + +def run_lookup(cur, sql, params = None, **kvargs): + """ Helper function to fetch one value Takes away all the hassle of preparing statements + and processing returned result giving out just one value. Uses plan cache if used inside + db service + """ + params = params or kvargs + sql = QueryBuilder(sql, params).get_sql(0) + cur.execute(sql) + row = cur.fetchone() + if row is None: + return None + return row[0] + +def run_exists(cur, sql, params = None, **kvargs): + """ Helper function to fetch one value Takes away all the hassle of preparing statements + and processing returned result giving out just one value. Uses plan cache if used inside + db service + """ + params = params or kvargs + val = run_lookup(cur, sql, params) + return not (val is None) + # launch doctest if __name__ == '__main__': import doctest |