Набор инструментов Python SQL, упрощающий операции CRUD

Прочитав эту статью, вы научитесь выполнять операции CRUD с выбранной вами базой данных на Python. В этом руководстве я буду использовать базу данных SQLite только в памяти, но ее также можно использовать для других баз данных. На основе официальной документации SQLAlchemy Expression Language:

«… Представляет систему представления структур и выражений реляционных баз данных с использованием конструкций Python. Эти конструкции смоделированы так, чтобы максимально приближать их к конструкциям базовой базы данных, обеспечивая при этом некоторую абстракцию различных различий в реализации между серверными модулями базы данных. Хотя конструкции пытаются представить эквивалентные концепции между бэкэндами с согласованными структурами, они не скрывают полезных концепций, которые уникальны для определенных подмножеств бэкэндов. Таким образом, язык выражений представляет собой метод написания нейтральных к серверной части выражений SQL, но не пытается обеспечить, чтобы выражения были нейтральными к серверной части ».

Фактически, SQLAlchemy известна своим объектно-реляционным картографом, который представляет собой отдельный API, построенный на основе языка выражений. В этой части мы вернемся к основам и сосредоточимся только на уровне абстракции языка выражений, чтобы получить обзор того, как он работает.

В этом руководстве есть 3 раздела:

  1. Настраивать
  2. Реализация
  3. Заключение

Переходим к следующему разделу, чтобы приступить к установке необходимого модуля.

1. Настройка

Установка SQLAlchemy с pip install довольно проста. Перед продолжением установки настоятельно рекомендуется создать виртуальную среду. Активируйте виртуальный терминал и выполните следующую команду.

pip install SQLAlchemy

Проверьте свою установку с помощью следующей команды (регистр не учитывается)

pip show sqlalchemy

Вы должны увидеть следующий результат

Давайте перейдем к следующему разделу и начнем писать код Python.

2. Реализация

Импортировать

Добавьте следующее объявление импорта в верхнюю часть файла Python.

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, DateTime, Float
from sqlalchemy.sql import select, update, insert, delete, text
import datetime

Инициализация

Начните инициализацию базы данных, подключив ее к Engine. Движок - это отправная точка для каждого приложения SQLAlchemy. Следующее изображение представляет собой структуру рабочего процесса в SLQAlchemy.

Добавьте следующий код после объявления импорта.

engine = create_engine('sqlite:///test.db', echo = True)

Первый параметр - это URL-адрес базы данных для подключения. Обычно используется следующий шаблон.

dialect+driver://username:password@host:port/database

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

Я установил echo на True, чтобы получить подробный вывод на консоли для целей отладки. Вы можете спокойно игнорировать этот параметр во время развертывания.

Метаданные

Следующая часть - определить метаданные, которые представляют таблицу и схему внутри нее. Создайте новый объект MetaData.

meta = MetaData()

Определите новую таблицу с помощью следующего кода. Назову таблицу user.

user = Table(
   'user', meta,
   Column('id', Integer, primary_key = True),
   Column('date', DateTime),
   Column('name', String),
   Column('bmi', Float),
)
  • id - Уникальный идентификатор для каждой строки данных. Определите его как первичный ключ для этой таблицы.
  • date — данные DateTime, содержащие метку времени при каждой вставке.
  • name - строковые данные, представляющие имя пользователя
  • bmi - плавающие данные, представляющие индекс массы тела пользователя.

Создайте таблицу в движке. Он создаст новый файл db внутри указанного вами каталога. Новая база данных и таблица будут созданы только в том случае, если ее нет. Можно безопасно вызывать его несколько раз.

meta.create_all(engine)

Создайте соединение с двигателем.

conn = engine.connect()

Вставлять

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

date = datetime.datetime.now()
ins = users.insert().values(date=date, name='wfng', bmi=25.5)
conn.execute(ins)

Несколько вставок можно легко выполнить с помощью следующего кода

date = datetime.datetime.now()
conn.execute(user.insert(), [
    {'date': date, 'name' : 'Alice', 'bmi' : 18.4},
    {'date': date, 'name' : 'Bob', 'bmi' : 22.5},
    {'date': date, 'name' : 'Charlie', 'bmi' : 26.1},
])

Вам просто нужно передать два параметра функции выполнения

  • user.insert() - Вызов функции вставки для операции INSERT.
  • list - Список данных словарей для вставки.

Вы должны увидеть следующий вывод на своем терминале, если вы включили параметр echo в True.

Выбирать

Получение данных может быть выполнено с помощью следующего кода

s = select([user])
result = conn.execute(s)
for row in result:
    print(row)

Вы должны увидеть следующий результат

Возвращенный результат представляет собой кортеж словарей, к которым можно получить доступ с помощью индекса

row[2]

или пара "ключ-значение"

row['name']

Обновлять

dUpdate выполняется с использованием следующего кода. Давайте обновим дату и время, если значение bmi превышает 25

date = datetime.datetime.now()
up = user.update().where(user.c.bmi > 25).values(date=date)
conn.execute(up)

Когда вы запрашиваете результат с помощью оператора SELECT, вы должны увидеть разницу в дате и времени третьей строки данных.

Удалить

Попробуем удалить строку данных. Следующий код удалит данные пользователя ниже 20,5 bmi. В этом случае Алиса должна быть удалена после запуска этого кода.

delete = user.delete().where(user.c.bmi < 20.5)
conn.execute(delete)

Вы должны получить следующий результат при запуске оператора SELECT, который указывает, что он работает должным образом.

Фактически вы можете вызвать удаление без указания условия. В этом случае он удалит все данные из таблицы.

delete_all = user.delete()
conn.execute(delete_all)

Когда вы снова попытаетесь вставить данные, id начнется с начального значения, равного 1.

Текстовый SQL

Если вы ищете старый добрый оператор SQL, для этого можно положиться на конструкцию text (). В следующем примере будут запрашиваться пользователи с bmi от 20 до 35.

stmt = text("SELECT * FROM user WHERE user.bmi BETWEEN :x AND :y")
result = conn.execute(stmt, x = 20, y = 35)
for row in result:
    print(row)

3. Заключение

Подведем итоги тому, что мы узнали сегодня.

Мы начали с установки SQLAlchemy через pip install.

Затем мы подробно изучили основы использования SQLAlchemy. Мы инициализировали движок с некоторыми предопределенными метаданными. Было установлено соединение для подключения к локальной базе данных SQLite.

Затем мы протестировали базовую операцию CRUD, используя уровень абстракции SQLAlchemy. Кроме того, мы также опробовали использование текстового метода SQL для вызова запроса с использованием базового оператора SQL.

Спасибо, что прочитали эту статью. Надеюсь увидеть вас снова в следующей статье!

Ссылка

  1. Документация по SQLAlchemy