import sqlite3 from sqlite3 import Connection import datetime class ResponseDb: DB_PATH = "response.db" def __init__(self): # establish connection self.con = self.get_connection() cur = self.con.cursor() # create table if it doesnt already exist table_string = "CREATE TABLE IF NOT EXISTS responses (dialogue_id text, task_id text, turn integer, question text, response text, datetime date)" cur.execute(table_string) self.con.commit() cur.close() def get_connection(self): """Put the connection in cache to reuse if path does not change between Streamlit reruns. NB : https://stackoverflow.com/questions/48218065/programmingerror-sqlite-objects-created-in-a-thread-can-only-be-used-in-that-sa """ return sqlite3.connect(self.DB_PATH, check_same_thread=False) #def __del__(self): #self.con.close() def add(self, dialogue_id, task_id, turn, question, response): cur = self.con.cursor() curr_datetime = datetime.datetime.now() cur.execute( "insert into responses values (?, ?, ?, ?, ?, ?)", (dialogue_id, int(task_id), turn, question, response, curr_datetime), ) self.con.commit() cur.close() def get_id(self, dialogue_id): cur = self.con.cursor() cur.execute( "select * from responses where conv=:id", {"id": dialogue_id}, ) results = cur.fetchall() cur.close() return results def get_id_turn(self, dialogue_id, turn): cur = self.con.cursor() cur.execute( "select * from responses where conv=:id and turn=:turn", { "id": dialogue_id, "turn": turn, }, ) results = cur.fetchall() cur.close() return results def get_all(self): cur = self.con.cursor() cur.execute( "select * from responses", ) results = cur.fetchall() cur.close() return results class StResponseDb(ResponseDb): def get_connection(self): """Put the connection in cache to reuse if path does not change between Streamlit reruns. NB : https://stackoverflow.com/questions/48218065/programmingerror-sqlite-objects-created-in-a-thread-can-only-be-used-in-that-sa """ return sqlite3.connect(self.DB_PATH, check_same_thread=False) if __name__ == "__main__": db = ResponseDb() print(db.get_all())