Загрузка данных
import duckdb
from sqlmodel import Session, select, create_engine, SQLModel, Field
from typing import Optional
class NetflixContent(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
type: str
title: str
director: Optional[str] = None
cast: Optional[str] = None
country: Optional[str] = None
date_added: Optional[str] = None
release_year: int
rating: Optional[str] = None
duration_value: Optional[int] = None
duration_unit: Optional[str] = None
listed_in: str
description: str
sqlite_url = "sqlite:///netflix_data.db"
engine = create_engine(sqlite_url)
def init_database(csv_file_path: str):
#! СОЗДАЕМ ПУСТУЮ БАЗУ ДАННЫХ
SQLModel.metadata.create_all(engine)
#! ПОДКЛЮЧАЕМ DUCKDB ДЛЯ РАБОТЫ С CSV ФАЙЛОМ
con = duckdb.connect()
#! ГОВОРИМ DUCKDB КАК НУЖНО СОХРАНЯТЬ ДАННЫЕ ВНУТРИ CSV ФАЙЛА
query = f"""
SELECT
trim(show_id),
trim(type),
trim(title),
trim(director),
trim("cast"),
trim(country),
trim(date_added),
CAST(release_year AS INTEGER),
trim(rating),
-- Вытаскиваем число (90)
CAST(regexp_extract(duration, '(\\d+)') AS INTEGER),
-- Вытаскиваем тип (min / Seasons)
regexp_extract(duration, '([a-zA-Z]+)'),
trim(listed_in),
trim(description)
FROM read_csv_auto('{csv_file_path}')
"""
# Выполняем запрос и получаем список кортежей
raw_data = con.execute(query).fetchall()
# Записываем данные в SQLite через сессию SQLModel
with Session(engine) as session:
#! проверка не заполненная ли у тебя база данных
existing_count = session.exec(select(NetflixContent)).first()
if existing_count:
print("База уже содержит данные. Пропускаю импорт.")
return
for row in raw_data:
item = NetflixContent(
show_id=row[0],
type=row[1],
title=row[2],
director=row[3],
cast=row[4],
country=row[5],
date_added=row[6],
release_year=row[7],
rating=row[8],
duration_value=row[9],
duration_unit=row[10],
listed_in=row[11],
description=row[12]
)
session.add(item)
session.commit()
print(f"Успешно импортировано {len(raw_data)} записей.")
# 2. ПРИМЕР ИСПОЛЬЗОВАНИЯ СИСТЕМЫ
if __name__ == "__main__":
# Замени 'image_860e3d.csv' на реальное имя твоего файла
# Если это скриншот из Excel, сохрани таблицу в CSV формат.
file_path = "netflix_titles.csv"
try:
# Собираем систему
init_database(file_path)
# Делаем запросы через SQLModel
with Session(engine) as session:
# Пример: Найти 5 самых свежих сериалов (TV Show)
statement = select(NetflixContent).where(
NetflixContent.country == "United States" and NetflixContent.country == "India",
NetflixContent.type == "Movie"
).order_by(NetflixContent.release_year.desc())
results = session.exec(statement).all()
print("\n--- Последние добавленные сериалы ---")
for show in results:
print(f"[{show.release_year} | {show.country}] {show.title} - {show.duration_value} {show.duration_unit}")
except Exception as e:
print(f"Ошибка: {e}")
#! https://www.kaggle.com/datasets/rohitsahoo/sales-forecasting
#! https://www.kaggle.com/datasets/gregorut/videogamesales
#! https://www.kaggle.com/datasets/carrie1/ecommerce-data