Spaces:
Sleeping
Sleeping
| # backend/database.py (ROBUST VERSION) | |
| import sqlite3 | |
| from datetime import datetime | |
| DB_NAME = "email_sorter.db" | |
| def init_db(): | |
| """Initializes the database using a context manager for safety.""" | |
| with sqlite3.connect(DB_NAME) as conn: | |
| cursor = conn.cursor() | |
| cursor.execute(''' | |
| CREATE TABLE IF NOT EXISTS emails ( | |
| id INTEGER PRIMARY KEY AUTOINCREMENT, | |
| timestamp TEXT NOT NULL, | |
| email_from TEXT, | |
| subject TEXT, | |
| body TEXT, | |
| predicted_folder TEXT, | |
| confidence REAL, | |
| user_feedback TEXT | |
| ) | |
| ''') | |
| print("Database initialized successfully.") | |
| def add_email_records(records_df): | |
| """Adds multiple email records from a pandas DataFrame using a context manager.""" | |
| with sqlite3.connect(DB_NAME) as conn: | |
| records_df['timestamp'] = datetime.now().strftime("%Y-%m-%d %H:%M:%S") | |
| records_df['user_feedback'] = None | |
| df_to_save = records_df.rename(columns={ | |
| 'From': 'email_from', | |
| 'Subject': 'subject', | |
| 'Body': 'body' | |
| }) | |
| db_columns = ['timestamp', 'email_from', 'subject', 'body', 'predicted_folder', 'confidence', 'user_feedback'] | |
| df_to_save = df_to_save[[col for col in db_columns if col in df_to_save.columns]] | |
| df_to_save.to_sql('emails', conn, if_exists='append', index=False) | |
| def get_all_emails(): | |
| """Fetches all email records using a context manager.""" | |
| with sqlite3.connect(DB_NAME) as conn: | |
| cursor = conn.cursor() | |
| cursor.execute("SELECT id, timestamp, email_from, subject, predicted_folder, confidence, user_feedback FROM emails ORDER BY timestamp DESC") | |
| records = cursor.fetchall() | |
| columns = [description[0] for description in cursor.description] | |
| return records, columns | |
| def update_feedback(record_id, corrected_label): | |
| """Updates the user_feedback for a specific record using a context manager.""" | |
| with sqlite3.connect(DB_NAME) as conn: | |
| cursor = conn.cursor() | |
| cursor.execute("UPDATE emails SET user_feedback = ? WHERE id = ?", (corrected_label, record_id)) | |
| print(f"Updated record ID {record_id} with feedback: {corrected_label}") | |