Это расширение к предыдущей статье 👀, в которой рассматриваются низкоуровневые методы установления соединения с базой данных SQL и выполнения запросов. Мы рассмотрим здесь эквивалентные высокоуровневые методы в SqlAlchemy и Pandas, чтобы сделать то же самое в меньшем количестве строк кода.

TL; DR: полный код

Предпосылки

Установите pyodbc, sqlalchemy и pandas, используя предпочитаемый вами менеджер пакетов

Затем установите необходимый драйвер для СУБД, к которой вы хотите подключиться. Например, если вы хотите подключиться к базе данных Microsoft SQL Server, вам необходимо скачать и установить драйвер из Microsoft, предварительно выбрав свою операционную систему.

Дополнительные сведения о pyodbc (Open DataBase Connectivity for Python) и СУБД (Система управления базами данных) см. 👀 в предыдущей статье

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

Хотя SqlAlchemy является объектно-реляционным сопоставителем, он также предлагает набор инструментов SQL. Чтобы подключиться к серверу, мы сначала создаем объект движка на основе URL в формате:

Для базы данных Microsoft SQL Server dialect равно mssql, а driver равно pyodbc. Затем мы передаем URL-адрес методу create_engine:

Установление соединения 🔗

Теперь мы можем легко использовать connect метод engine для возврата объекта соединения cnxn, который автоматически закрывается при использовании с диспетчером контекста:

Выполнение запроса с помощью Pandas 🐼

Предположим, что база данных, к которой мы подключены, имеет следующие 2 таблицы T_CUSTOMERS и T_ADDRESSES:

И мы хотим выполнить запрос в get_customer_details.sql

Pandas может читать инструкцию / файл SQL непосредственно в DataFrame при наличии соединения с помощью метода read_sql. Мы также используем метод text для составления текстового оператора, который передается в базу данных в основном без изменений:

Это было здорово! несколько строк кода для подключения и выполнения запроса в DataFrame 🙇

Выполнение параметризованного запроса 🐼❔

Что, если мы захотим использовать один и тот же запрос для другого клиента? Мы могли бы изменить его, но вместо этого мы можем использовать параметризованный запрос, чтобы он принимал любого клиента!

Просто замените имя клиента в запросе на :param_name, например :lname:

Мы выполняем новый запрос точно так же, как и раньше, но передаем новый аргумент params, который представляет собой словарь param_name: param_value:

Что следующее?

Начните использовать Docker 🐋 для Python и узнайте, как создать файл требований Python 📄 с помощью pipenv.

Удачного кодирования!