Spaces:
Sleeping
Sleeping
| import sqlite3 | |
| from typing import Optional | |
| class Database: | |
| def __init__(self, db_path="chat_history.db"): | |
| self.db_path = db_path | |
| self.conn = None | |
| def connect(self): | |
| self.conn = sqlite3.connect(self.db_path, check_same_thread=False) | |
| self.create_tables() | |
| def create_tables(self): | |
| c = self.conn.cursor() | |
| c.execute('''CREATE TABLE IF NOT EXISTS users ( | |
| id INTEGER PRIMARY KEY AUTOINCREMENT, | |
| username TEXT UNIQUE, | |
| password TEXT | |
| )''') | |
| c.execute('''CREATE TABLE IF NOT EXISTS conversations ( | |
| id INTEGER PRIMARY KEY AUTOINCREMENT, | |
| user_id INTEGER, | |
| conversation TEXT, | |
| FOREIGN KEY(user_id) REFERENCES users(id) | |
| )''') | |
| self.conn.commit() | |
| def add_user(self, username, password): | |
| c = self.conn.cursor() | |
| try: | |
| c.execute("INSERT INTO users (username, password) VALUES (_, _)", (username, password)) | |
| self.conn.commit() | |
| return True | |
| except sqlite3.IntegrityError: | |
| return False | |
| def get_user(self, username, password) -> Optional[int]: | |
| c = self.conn.cursor() | |
| c.execute("SELECT id FROM users WHERE username=? AND password=?", (username, password)) | |
| row = c.fetchone() | |
| return row[0] if row else None | |
| def add_conversation(self, user_id, conversation): | |
| c = self.conn.cursor() | |
| c.execute("INSERT INTO conversations (user_id, conversation) VALUES (?, ?)", (user_id, conversation)) | |
| self.conn.commit() | |
| def get_conversations(self, user_id): | |
| c = self.conn.cursor() | |
| c.execute("SELECT conversation FROM conversations WHERE user_id=? ORDER BY id DESC LIMIT 1", (user_id,)) | |
| row = c.fetchone() | |
| return row[0] if row else None | |
| def clear_conversation(self, user_id): | |
| c = self.conn.cursor() | |
| c.execute("DELETE FROM conversations WHERE user_id=?", (user_id,)) | |
| self.conn.commit() |