/
zimaaadev
/
Parser
Обзор
Документация
Войти
/
zimaaadev
/
Parser
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
data/init_db.py
100 строк
3 KB
zimaaa
Поправил init DB
11 дек 2025, 11:54
11 дек 2025, 11:54
e599638
Код
Авторство
О чём код?
# init_db.py import os import sqlite3 from pathlib import Path # === Определяем пути === PROJECT_DIR = Path(__file__).parent DATA_DIR = PROJECT_DIR / "data" DATABASE_PATH = DATA_DIR / "realty.db" # === Создаём папку data, если её нет === DATA_DIR.mkdir(exist_ok=True) # === Подключение к БД (создастся, если нет) === conn = sqlite3.connect(DATABASE_PATH) cursor = conn.cursor() print(f"✅ Подключено к базе: {DATABASE_PATH}") # === Создание таблицы объявлений === cursor.execute(""" CREATE TABLE IF NOT EXISTS items ( id INTEGER PRIMARY KEY AUTOINCREMENT, avito_id TEXT UNIQUE NOT NULL, title TEXT NOT NULL, price INTEGER, price_per_m2 TEXT, url TEXT NOT NULL, location TEXT, street TEXT, house TEXT, description TEXT, published_at TEXT, seller TEXT, house_type TEXT, sale_type TEXT, price_negotiable INTEGER DEFAULT 0, documents_verified INTEGER DEFAULT 0, image_url TEXT, is_new INTEGER DEFAULT 0, district TEXT, lat REAL, lng REAL, city TEXT, parsed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) """) print("✅ Таблица 'items' создана или уже существует") # === Виртуальная таблица для полнотекстового поиска === cursor.execute(""" CREATE VIRTUAL TABLE IF NOT EXISTS items_fts USING fts5( title, description, location, content='items', content_rowid='id' ) """) print("✅ Виртуальная таблица 'items_fts' создана") # === Триггеры для синхронизации FTS (автообновление при INSERT/UPDATE/DELETE) === cursor.executescript(""" -- Синхронизация при вставке CREATE TRIGGER IF NOT EXISTS items_insert_trig AFTER INSERT ON items BEGIN INSERT INTO items_fts(rowid, title, description, location) VALUES (new.id, new.title, new.description, new.location); END; -- Синхронизация при обновлении CREATE TRIGGER IF NOT EXISTS items_update_trig AFTER UPDATE ON items BEGIN UPDATE items_fts SET title=new.title, description=new.description, location=new.location WHERE rowid=new.id; END; -- Синхронизация при удалении CREATE TRIGGER IF NOT EXISTS items_delete_trig AFTER DELETE ON items BEGIN DELETE FROM items_fts WHERE rowid=old.id; END; """) print("✅ Триггеры для FTS синхронизации добавлены") # === Индексы для ускорения фильтров === cursor.execute("CREATE INDEX IF NOT EXISTS idx_price ON items(price)") cursor.execute("CREATE INDEX IF NOT EXISTS idx_district ON items(district)") cursor.execute("CREATE INDEX IF NOT EXISTS idx_city ON items(city)") cursor.execute("CREATE INDEX IF NOT EXISTS idx_parsed_at ON items(parsed_at)") cursor.execute("CREATE INDEX IF NOT EXISTS idx_avito_id ON items(avito_id)") print("✅ Индексы для ускорения поиска добавлены") # === Подтверждение и закрытие === conn.commit() conn.close() print("\n✨ База данных инициализирована успешно!") print(f"📄 Файл базы: {DATABASE_PATH.resolve()}")