Джейд Картер

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


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

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