Files

46 lines
1.3 KiB
Python
Raw Permalink Normal View History

2026-10-09 22:15:22 +03:00
"""SQLite-слой: 3 таблицы, WAL-режим, один файл db.sqlite."""
from __future__ import annotations
import os
import sqlite3
SCHEMA = """
PRAGMA journal_mode=WAL;
CREATE TABLE IF NOT EXISTS videos (
filename TEXT PRIMARY KEY,
likes INTEGER NOT NULL DEFAULT 0,
created_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE TABLE IF NOT EXISTS tags (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL UNIQUE
);
CREATE TABLE IF NOT EXISTS video_tags (
filename TEXT NOT NULL REFERENCES videos(filename) ON DELETE CASCADE,
tag_id INTEGER NOT NULL REFERENCES tags(id) ON DELETE CASCADE,
UNIQUE (filename, tag_id)
);
CREATE TABLE IF NOT EXISTS likes_log (
ip TEXT NOT NULL,
filename TEXT NOT NULL,
day TEXT NOT NULL,
UNIQUE (ip, filename, day)
);
CREATE INDEX IF NOT EXISTS idx_video_tags_tag ON video_tags(tag_id);
CREATE INDEX IF NOT EXISTS idx_videos_likes ON videos(likes DESC);
"""
DB_PATH = os.environ.get("DB_PATH", os.path.join(os.path.dirname(__file__), "db.sqlite"))
def connect() -> sqlite3.Connection:
con = sqlite3.connect(DB_PATH)
con.row_factory = sqlite3.Row
con.execute("PRAGMA journal_mode=WAL")
con.execute("PRAGMA foreign_keys=ON")
return con
def init_db() -> None:
with connect() as con:
con.executescript(SCHEMA)