139_spanish-voice-trainer/database/connection.py

59 lines
No EOL
1.9 KiB
Python

# database/connection.py
import sqlite3
import os
DB_NAME = "spanish_trainer.db"
def get_connection():
"""Returns a standard connection object to the SQLite database."""
return sqlite3.connect(DB_NAME)
def init_db():
"""
Initializes the SQLite database tables if they do not exist.
This safely runs on every boot without wiping your existing data.
"""
print(f"🗄️ Checking database status for '{DB_NAME}'...")
# The SQL schema we designed for your glossary, cross-references, and tracks
schema = """
CREATE TABLE IF NOT EXISTS phrases (
id INTEGER PRIMARY KEY AUTOINCREMENT,
text TEXT NOT NULL,
language TEXT NOT NULL,
textbook TEXT DEFAULT NULL,
unit INTEGER DEFAULT NULL,
source_context TEXT DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS translations (
source_phrase_id INTEGER,
target_phrase_id INTEGER,
PRIMARY KEY (source_phrase_id, target_phrase_id),
FOREIGN KEY (source_phrase_id) REFERENCES phrases(id) ON DELETE CASCADE,
FOREIGN KEY (target_phrase_id) REFERENCES phrases(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS audio_tracks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
phrase_id INTEGER NOT NULL,
voice_gender TEXT NOT NULL,
voice_name TEXT NOT NULL,
file_path TEXT NOT NULL,
is_reference INTEGER DEFAULT 1,
FOREIGN KEY (phrase_id) REFERENCES phrases(id) ON DELETE CASCADE
);
"""
conn = get_connection()
try:
cursor = conn.cursor()
# executescript allows running multiple CREATE TABLE statements at once
cursor.executescript(schema)
conn.commit()
print("✅ Database tables verified and initialized successfully.")
except sqlite3.Error as e:
print(f"❌ Database initialization failed: {e}")
finally:
conn.close()