/
Zero1l
/
3213
Обзор
Документация
Войти
/
Zero1l
/
3213
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
README.py
91 строка
3 KB
Zero1l
update README.py
02 фев 2026, 13:07
Верифицирован
02 фев 2026, 13:07
ddc57db
Код
Авторство
О чём код?
# 3213 from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession from sqlalchemy.orm import sessionmaker, declarative_base from sqlalchemy import Column, Integer, String import asyncio import aiohttp # Настройка базы данных DATABASE_URL = "sqlite+aiosqlite:///starwars.db" engine = create_async_engine(DATABASE_URL, echo=False) AsyncSessionLocal = sessionmaker( engine, class_=AsyncSession, expire_on_commit=False ) Base = declarative_base() # Модель персонажа class Person(Base): __tablename__ = "people" id = Column(Integer, primary_key=True) name = Column(String(100), nullable=False) birth_year = Column(String(20)) eye_color = Column(String(30)) gender = Column(String(20)) hair_color = Column(String(50)) homeworld = Column(String(100)) mass = Column(String(20)) skin_color = Column(String(50)) async def migrate(): async with engine.begin() as conn: await conn.run_sync(Base.metadata.create_all) BASE_URL = "https://www.swapi.tech/api/people" async def fetch_all_people(): people = [] url = BASE_URL async with aiohttp.ClientSession() as session: while url: async with session.get(url) as response: data = await response.json() # Данные уже содержат список результатов results = data.get("results", []) for person in results: # В ответе уже есть свойства, можно сразу использовать свойства person_data = person["properties"] person_data["uid"] = person["uid"] people.append(person_data) url = data.get("next") return people async def save_people(people): async with AsyncSessionLocal() as db: for props in people: # Преобразуем uid в id try: person_id = int(props["uid"]) except (KeyError, ValueError): person_id = None # Или пропускать, если uid нет или не число db.add(Person( id=person_id, name=props.get("name"), birth_year=props.get("birth_year"), eye_color=props.get("eye_color"), gender=props.get("gender"), hair_color=props.get("hair_color"), homeworld=props.get("homeworld"), mass=props.get("mass"), skin_color=props.get("skin_color"), )) await db.commit() async def main(): await migrate() # Создание таблиц при старте people = await fetch_all_people() await save_people(people) print(f"Загружено персонажей: {len(people)}") if __name__ == "__main__": asyncio.run(main())