Набор инструментов Python SQL, упрощающий операции CRUD
Прочитав эту статью, вы научитесь выполнять операции CRUD с выбранной вами базой данных на Python. В этом руководстве я буду использовать базу данных SQLite только в памяти, но ее также можно использовать для других баз данных. На основе официальной документации SQLAlchemy Expression Language:
«… Представляет систему представления структур и выражений реляционных баз данных с использованием конструкций Python. Эти конструкции смоделированы так, чтобы максимально приближать их к конструкциям базовой базы данных, обеспечивая при этом некоторую абстракцию различных различий в реализации между серверными модулями базы данных. Хотя конструкции пытаются представить эквивалентные концепции между бэкэндами с согласованными структурами, они не скрывают полезных концепций, которые уникальны для определенных подмножеств бэкэндов. Таким образом, язык выражений представляет собой метод написания нейтральных к серверной части выражений SQL, но не пытается обеспечить, чтобы выражения были нейтральными к серверной части ».
Фактически, SQLAlchemy известна своим объектно-реляционным картографом, который представляет собой отдельный API, построенный на основе языка выражений. В этой части мы вернемся к основам и сосредоточимся только на уровне абстракции языка выражений, чтобы получить обзор того, как он работает.
В этом руководстве есть 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.
Спасибо, что прочитали эту статью. Надеюсь увидеть вас снова в следующей статье!