@contextmanager def transaction(self): conn = sqlite3.connect(self.db_path, check_same_thread=False) c = conn.cursor() try: yield c conn.commit() finally: conn.close() def save_result(self, agent_id, result, session_id=None): with self.transaction() as c: c.execute( 'INSERT INTO results (agent_id, result, session_id) VALUES (?, ?, ?)', (agent_id, result, session_id) )