terom@22: import sqlite3 terom@22: terom@47: try : terom@47: conn = sqlite3.connect("db/degal.db") terom@47: terom@47: except sqlite3.OperationalError : terom@47: conn = None terom@22: terom@22: def execute (expr, *args) : terom@22: c = conn.cursor() terom@22: c.execute(expr, args) terom@22: terom@22: return c terom@22: terom@24: def execute_many (expr, iter) : terom@24: c = conn.cursor() terom@24: c.executemany(expr, iter) terom@24: terom@24: return c terom@24: terom@26: def insert (expr, *args) : terom@26: return execute_commit(expr, *args).lastrowid terom@26: terom@26: def insert_many (cb, expr, iter) : terom@26: """ terom@26: Perform an executemany with the given iterator (which must yield (cb_val, args) tuples), calling the given callback with the args (cb_val, row_id) terom@26: """ terom@26: terom@26: c = conn.cursor() terom@26: terom@26: c.executemany(expr, _lastrowid_adapter(c, iter, cb)) terom@26: terom@26: return commit(c) terom@26: terom@26: def _lastrowid_adapter (c, iter, cb) : terom@26: for val, args in iter : terom@26: yield args terom@26: terom@26: cb(val, c.lastrowid) terom@26: terom@24: def commit (cursor) : terom@24: try : terom@24: cursor.execute("COMMIT") terom@24: except sqlite3.OperationalError : terom@24: pass # ffs. INSERT just doesn't do anything otherwise terom@24: terom@26: return cursor terom@24: terom@24: def execute_commit (expr, *args) : terom@24: return commit(execute(expr, *args)) terom@24: terom@24: def execute_commit_many (expr, iter) : terom@24: return commit(execute_many(expr, iter)) terom@22: terom@22: select = execute terom@22: terom@24: delete = execute_commit terom@24: terom@24: delete_many = execute_commit_many terom@24: terom@47: if conn : terom@47: cursor = conn.cursor terom@22: terom@47: