This commit is contained in:
2025-09-05 00:42:06 +08:00
parent d092984a85
commit 96c7f5b347
2 changed files with 133 additions and 0 deletions

111
db.py Normal file
View File

@@ -0,0 +1,111 @@
import mysql.connector
def connect_to_db(host="localhost", user="root", password="password", database="media_db"):
return mysql.connector.connect(
host=host,
user=user,
password=password,
database=database
)
# ------------------------------
# Insert or Update Video Entry
# ------------------------------
def insert_or_update_video(cursor, uuid, video_path, silenced_video_path=None, model_name=None):
cursor.execute("""
INSERT INTO videos (uuid, video_path, silenced_video_path, model_name)
VALUES (%s, %s, %s, %s)
ON DUPLICATE KEY UPDATE
video_path = VALUES(video_path),
silenced_video_path = VALUES(silenced_video_path),
model_name = VALUES(model_name)
""", (uuid, video_path, silenced_video_path, model_name))
# ------------------------------
# Insert or Update Audio Entry
# ------------------------------
def insert_or_update_audio(cursor, uuid, audio_type, file_path):
if audio_type not in ('original', 'formatted'):
raise ValueError("audio_type must be 'original' or 'formatted'")
cursor.execute("""
SELECT id FROM audios WHERE uuid = %s AND type = %s
""", (uuid, audio_type))
if cursor.fetchone():
cursor.execute("""
UPDATE audios SET file_path = %s WHERE uuid = %s AND type = %s
""", (file_path, uuid, audio_type))
else:
cursor.execute("""
INSERT INTO audios (uuid, type, file_path)
VALUES (%s, %s, %s)
""", (uuid, audio_type, file_path))
# ------------------------------
# Insert or Update Reference Text
# ------------------------------
def insert_or_update_ref_text(cursor, uuid, ref_text):
cursor.execute("""
INSERT INTO reference_texts (uuid, ref_text)
VALUES (%s, %s)
ON DUPLICATE KEY UPDATE ref_text = VALUES(ref_text)
""", (uuid, ref_text))
# ------------------------------
# Delete All Entries for a UUID
# ------------------------------
def delete_entry(db, uuid):
cursor = db.cursor()
cursor.execute("DELETE FROM reference_texts WHERE uuid = %s", (uuid,))
cursor.execute("DELETE FROM audios WHERE uuid = %s", (uuid,))
cursor.execute("DELETE FROM videos WHERE uuid = %s", (uuid,))
db.commit()
cursor.close()
# ------------------------------
# Insert New Media Record
# ------------------------------
def insert_entry(db, uuid, video_path, silenced_video_path=None, model_name=None,
audio_paths=None, ref_text=None):
cursor = db.cursor()
insert_or_update_video(cursor, uuid, video_path, silenced_video_path, model_name)
if audio_paths:
for typ, path in audio_paths.items():
if path:
insert_or_update_audio(cursor, uuid, typ, path)
if ref_text:
insert_or_update_ref_text(cursor, uuid, ref_text)
db.commit()
cursor.close()
# ------------------------------
# Update Entry (Selective)
# ------------------------------
def update_entry(db, uuid, video_path=None, silenced_video_path=None, model_name=None,
audio_paths=None, ref_text=None):
cursor = db.cursor()
if video_path or silenced_video_path or model_name:
insert_or_update_video(cursor, uuid,
video_path or get_existing_value(cursor, uuid, 'video_path'),
silenced_video_path or get_existing_value(cursor, uuid, 'silenced_video_path'),
model_name or get_existing_value(cursor, uuid, 'model_name'))
if audio_paths:
for typ, path in audio_paths.items():
if path:
insert_or_update_audio(cursor, uuid, typ, path)
if ref_text:
insert_or_update_ref_text(cursor, uuid, ref_text)
db.commit()
cursor.close()
def get_existing_value(cursor, uuid, field):
cursor.execute(f"SELECT {field} FROM videos WHERE uuid = %s", (uuid,))
result = cursor.fetchone()
return result[0] if result else None

22
update.sql Normal file
View File

@@ -0,0 +1,22 @@
CREATE TABLE IF NOT EXISTS videos (
id INT AUTO_INCREMENT PRIMARY KEY,
uuid VARCHAR(36) NOT NULL UNIQUE,
video_path TEXT NOT NULL,
silenced_video_path TEXT,
model_name VARCHAR(255)
);
CREATE TABLE IF NOT EXISTS audios (
id INT AUTO_INCREMENT PRIMARY KEY,
uuid VARCHAR(36) NOT NULL,
type ENUM('original', 'formatted') NOT NULL,
file_path TEXT NOT NULL,
FOREIGN KEY (uuid) REFERENCES videos(uuid) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS reference_texts (
id INT AUTO_INCREMENT PRIMARY KEY,
uuid VARCHAR(36) NOT NULL,
ref_text TEXT,
FOREIGN KEY (uuid) REFERENCES videos(uuid) ON DELETE CASCADE
);