Sqlalchemy python примеры postgresql

Установка SQLAlchemy и подключение к базе данных

SQLAlchemy можно использовать с Python 2.7 и более поздними версиями. В этом руководстве будет использоваться Python 3.8, но вы можете выбрать любую версию Python 3.6+.

Установка SQLAlchemy

Для установки SQLAlchemy введите следующее:

Чтобы проверить успешность установки введите следующее в командной строке:

 
 
>>> import sqlalchemy >>> sqlalchemy.__version__ '1.4.8'

Установка DBAPI

По умолчанию SQLAlchemy работает только с базой данных SQLite без дополнительных драйверов. Для работы с другими базами данных необходимо установить DBAPI-совместимый драйвер в соответствии с базой данных.

Что такое DBAPI?
DBAPI — это стандарт, который поощряет один и тот же API для работы с большим количеством баз данных. В следующей таблице перечислены все DBAPI-совместимые драйверы:

База данных DBAPI драйвер
MySQL PyMySQL, MySQL-Connector, CyMySQL, MySQL-Python (по умолчанию)
PostgreSQL psycopg2 (по умолчанию), pg8000,
Microsoft SQL Server PyODBC (по умолчанию), pymssql
Oracle cx-Oracle (по умолчанию)
Firebird fdb (по умолчанию), kinterbasdb

Все примеры в этом руководстве протестированы в PostgreSQL, но вы можете выбрать базу данных по вкусу. Для установки DBAPI psycopg2 для PostgreSQL введите следующую команду:

Подготовка к подключению

Первый шаг для подключения к базе данных — создания объекта Engine . Именно он отвечает за взаимодействие с базой данных. Состоит из двух элементов: диалекта и пула соединений.

Диалект SQLAlchemy

SQL — это стандартный язык для работы с базами данных. Однако и он отличается от базы к базе. Производители баз данных редко придерживаются одной и той же версии и предпочитают добавлять свои особенности. Например, если вы используете Firebird , то для получения id и name для первых 5 строк из таблицы employees нужна следующая команда:

select first 10 id, name from employees

А вот как получить тот же результат для MySQL:

select id, name from employees limit 10 

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

Пул соединений SQLAlchemy

Пул соединений — это стандартный способ кэширования соединений в памяти, что позволяет использовать их повторно. Создавать соединение каждый раз при необходимости связаться с базой данных — затратно. А пул соединений обеспечивает неплохой прирост производительности.

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

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

dialect+driver://username:password@host:port/database
  • dialect — это имя базы данных (mysql, postgresql, mssql, oracle и так далее).
  • driver — используемый DBAPI. Этот параметр является необязательным. Если его не указать будет использоваться драйвер по умолчанию (если он установлен).
  • username и password — данные для получения доступа к базе данных.
  • host — расположение сервера базы данных.
  • port — порт для подключения.
  • database — название базы данных.

Вот код для создания движка некоторых популярных баз данных:

 
 
from sqlalchemy import create_engine # Подключение к серверу MySQL на localhost с помощью PyMySQL DBAPI. engine = create_engine("mysql+pymysql://root:pass@localhost/mydb") # Подключение к серверу MySQL по ip 23.92.23.113 с использованием mysql-python DBAPI. engine = create_engine("mysql+mysqldb://root:pass@23.92.23.113/mydb") # Подключение к серверу PostgreSQL на localhost с помощью psycopg2 DBAPI engine = create_engine("postgresql+psycopg2://root:pass@localhost/mydb") # Подключение к серверу Oracle на локальном хосте с помощью cx-Oracle DBAPI. engine = create_engine("oracle+cx_oracle://root:pass@localhost/mydb")) # Подключение к MSSQL серверу на localhost с помощью PyODBC DBAPI. engine = create_engine("oracle+pyodbc://root:pass@localhost/mydb")

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

 
 
from sqlalchemy import create_engine engine = create_engine('sqlite:///sqlite3.db') # используя относительный путь engine = create_engine('sqlite:////path/to/sqlite3.db') # абсолютный путь

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

Но создание движка — это еще не подключение к базе данных. Для получения соединения нужно использовать метод connect() объекта Engine , который возвращает объект типа Connection .

 
 
from sqlalchemy import create_engine # 1111 это мой пароль для пользователя postgres engine = create_engine("postgresql+psycopg2://postgres:1111@localhost/sqlalchemy_tuts") engine.connect() print(engine)

Но если запустить его, то будет следующая ошибка:

sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) (Background on this error at: http://sqlalche.me/e/14/e3q8)

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

 
 
import psycopg2 from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT # Устанавливаем соединение с postgres connection = psycopg2.connect(user="postgres", password="1111") connection.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT) # Создаем курсор для выполнения операций с базой данных cursor = connection.cursor() sql_create_database = # Создаем базу данных cursor.execute('create database sqlalchemy_tuts') # Закрываем соединение cursor.close() connection.close()

Запустите скрипт еще раз, чтобы получить нужный вывод:

Engine(postgresql+psycopg2://postgres:***@localhost/sqlalchemy_tuts)

Дополнительные аргументы

В следующей таблице перечислены дополнительные аргументы-ключевые слова, которые можно передать в функцию create_engine() .

Аргумент Описание
echo Булево значение. Если задать True, то движок будет сохранять логи SQL в стандартный вывод. По умолчанию значение равно False
pool_size Определяет количество соединений для пула. По умолчанию — 5
max_overflow Определяет количество соединений вне значения pool_size . По умолчанию — 10
encoding Определяет кодировку SQLAlchemy. По умолчанию — UTF-8. Однако этот параметр не влияет на кодировку всей базы данных
isolation_level Уровень изоляции. Эта настройка контролирует степень изоляции одной транзакции. Разные базы данных поддерживают разные уровни. Для этого лучше ознакомиться с документацией конкретной базы данных

Вот скрипт, в котором использованы дополнительные аргументы-ключевые слова при создании движка:

Источник

Читайте также:  Python list files with path
Оцените статью