Библиотеки Python Часть 2. Практическое применение. Джейд Картер

Читать онлайн.
Название Библиотеки Python Часть 2. Практическое применение
Автор произведения Джейд Картер
Жанр
Серия
Издательство
Год выпуска 2025
isbn



Скачать книгу

Pandas предоставляет метод `to_sql`:

      ```python

      # Сохранение отфильтрованных данных в новую таблицу filtered_users

      filtered_df.to_sql('filtered_users', engine, if_exists='replace', index=False)

      print("Данные сохранены в таблицу filtered_users.")

      ```

      Теперь в базе данных появилась новая таблица `filtered_users`, содержащая обработанные данные.

      Работа с ORM

      Для более сложных сценариев SQLAlchemy поддерживает ORM, позволяющий работать с таблицами как с Python-классами.

      Определим класс для таблицы `users`:

      ```python

      from sqlalchemy.ext.declarative import declarative_base

      from sqlalchemy.orm import sessionmaker

      Base = declarative_base()

      class User(Base):

      __tablename__ = 'users'

      id = Column(Integer, primary_key=True)

      name = Column(String)

      age = Column(Integer)

      email = Column(String)

      # Создаем сессию для работы с ORM

      Session = sessionmaker(bind=engine)

      session = Session()

      # Пример чтения данных через ORM

      users = session.query(User).filter(User.age > 30).all()

      for user in users:

      print(f"Имя: {user.name}, Возраст: {user.age}, Email: {user.email}")

      ```

      Этот подход особенно удобен, если вы предпочитаете объектно-ориентированный стиль работы с базой данных.

      Пример: Анализ данных с SQLAlchemy и Pandas

      Представьте, что у вас есть база данных с информацией о продажах, и вы хотите найти города, в которых средняя сумма покупок превышает 5000.

      1. Создадим таблицу:

      ```python

      sales = Table(

      'sales', metadata,

      Column('id', Integer, primary_key=True),

      Column('city', String),

      Column('amount', Integer)

      )

      metadata.create_all(engine)

      # Добавим данные

      conn.execute(insert(sales).values([

      {'city': 'New York', 'amount': 7000},

      {'city': 'Los Angeles', 'amount': 3000},

      {'city': 'New York', 'amount': 8000},

      {'city': 'Los Angeles', 'amount': 2000},

      {'city': 'Chicago', 'amount': 6000}

      ]))

      ```

      2. Выгрузим данные и найдем среднюю сумму по городам:

      ```python

      # Чтение данных из таблицы sales

      query = "SELECT * FROM sales"

      sales_df = pd.read_sql(query, engine)

      # Вычисление средней суммы по городам

      avg_sales = sales_df.groupby('city')['amount'].mean().reset_index()

      # Фильтрация городов с средней суммой > 5000

      filtered_sales = avg_sales[avg_sales['amount'] > 5000]

      print(filtered_sales)

      ```

      Результат:

      ```

      city amount

      0 Chicago 6000.0

      1 New York 7500.0

      ```

      3. Сохраним результат в таблицу:

      ```python

      filtered_sales.to_sql('high_avg_sales', engine, if_exists='replace', index=False)

      ```

      Теперь обработанные данные сохранены в базе, и вы можете использовать их в дальнейшем.

      SQLAlchemy предоставляет мощные возможности для работы с базами данных, а интеграция с Pandas делает обработку данных ещё более удобной и гибкой. Вы можете быстро выгружать данные из базы, анализировать их с помощью Pandas и сохранять обратно, что упрощает создание аналитических решений и автоматизацию работы с данными.

Задачи для практики

      Задача 1: Создание базы данных пользователей и извлечение данных

      Описание:

      Создайте базу данных `users.db` с таблицей `users`, содержащей следующие столбцы:

      – `id` – уникальный идентификатор пользователя.

      – `name` – имя пользователя.

      – `age` – возраст пользователя.

      – `email` – электронная почта.

      Добавьте в таблицу данные о пяти пользователях и извлеките всех пользователей старше 30 лет.

      Решение:

      ```python

      from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData

      import