SQL ORM SQLAlchemy

Подключение к базе данных через SQLAlchemy

Последнее обновление: 27.02.2023

Приложение на языке Python может использовать различные базы данных - SQLite, PostgreSQL и т.д. Но при работе с каждой конкретной системой базой данных мы вынуждены писать запросы на языке SQL, соответственно возникает необходимость владения данным языком. Кроме того, если мы захотим легко и быстро перейти с одной СУБД к другой, то, возможно, нам потребуется внести немало изменений в настройку подключения, синтаксис запросов, поскольку диалекты SQL в разных СУБД могут отличаться. Чтобы решить эти проблемы, применяются специальные ORM-библиотеки (Object Relational Mapper), которые позволяют абстрагироваться от строения конкретной базы данных и позволяют работать с данными как с объектами стандартных классов Python. Для языка Python одной из наиболее популярных ORM-библиотек является SQLAlchemy (официальный сайт https://www.sqlalchemy.org/).

Официально поддерживаются все наиболее популярные системы баз данных: PostgreSQL, MySQL, MariaDB, SQLite, Oracle и Microsoft SQL Server. Кроме того, есть сторонние пакеты для SQLAlchemy, которые добавляют поддержку для менее распространенных систем, типа CockroachDB, Firebird, IBM DB2 и т.д.

При работе с SQLAlchemy следует учитывать версию Python: SQLAlchemy 2.0 поддерживает Python 3.7 и выше.

Для работы с SQLAlchemy прежде всего установим соответствующий пакет через менеджер pip:

pip install SQLAlchemy

Создание движка

Для начала взаимодействия с базой данных необходимо создать движок - объект класса Engine. Обычно он представляет глобальный объект, который создается в приложении один раз для всех взаимодействий с определенным сервером баз данных и который хранит все подключения в виде пула к этому серверу баз данных. Для создания движка применяется функция create_engine():

create_engine(url, **kwargs)

В качестве обязательного параметра в функцию create_engine() передается адрес URL подключения в формате

dialect[+driver]://user:password@host/dbname[?key=value..]

Строка подключения складывается из следующих частей:

  • dialect представляет название системы бд, например, mysql, oracle, postgresql, sqlite.

  • driver указывает на драйвер (DBAPI), применяемый для подключения к бд, например, psycopg2, pyodbc, cx_oracle и т.д. Для одной и той же СУБД может быть доступно множество драйверов. Если драйвер явным образом не указывается, то применяется драйвер по умолчанию.

  • user:password: имя и пароль пользователя для подключения к бд

  • host: адрес сервера базы данных

  • dbname: имя базы данных

  • key=value: пары ключ-значения, которые представляют дополнительные параметры для подключения

Например, определим движок для подключения к базе данных sqlite, которая называется metanit.db:

from sqlalchemy import create_engine
engine = create_engine("sqlite:///metanit.db")

В данном случае указаны только опции dialect и dbname.

Для настройки движка функция create_engine() также может принимать вспомогательные параметры. Их довольно, отметим наиболее распространенный - параметр echo:

from sqlalchemy import create_engine
engine = create_engine("sqlite:///metanit.db", echo=True)

При echo=True все операции с бд будут логгироваться на консоль

Примеры подключений для разных СУБД

PostgreSQL

engine = create_engine("postgresql://user:password@localhost/database")

MySQL

engine = create_engine("mysql://user:password@localhost/database")

Oracle

engine = create_engine("oracle://user:password@127.0.0.1:1521/database")

Microsoft SQL Server

engine = create_engine("mssql://user:password@database")

SQLite:

engine = create_engine("sqlite:///относительный_путь/database")
engine = create_engine("sqlite:////абсолютный_путь/database")

Одной из прелестей работы с SQLAlchemy состоит в том, что, чтобы перейти от одной СУБД к другой, в большинстве случаев достаточно изменить строку подключения к базе данных.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850