Введение
Сегодня мы рассмотрим на практике, как можно всего в несколько строк кода подключиться к СУБД MySQL с помощью Python. Мы также выполним несколько основных команд для выборки, добавления и удаления данных из таблицы на языке SQL.
Установка необходимых библиотек
Установим пакет PyMySQL в наше виртуальное окружение. Данная библиотека является связующим звеном между Python и нашей СУБД:
pip install pymysql
У библиотеки есть весьма простая, понятная документация и большое комьюнити.
Создадим файл main.py , в котором будет происходить вся магия и импортируем в него ранее установленный модуль:
import pymysql
Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека питониста» Интересно, перейти к каналу
Подключение к БД
Первым делом нам нужно подключиться к базе. Создадим объект класса pymysql , вызовем у него метод connect и передадим в него параметры для подключения к нашей базе данных (БД):
main.py
import pymysql connection = pymysql.connect( host='127.0.0.1', port=3306, user='first_user', password='qwerty', database='db_name', cursorclass=pymysql.cursors.DictCursor )
host : если ваша БД находится на локальной машине, то его значение будет localhost , либо 127.0.0.1, либо IP адрес хостинга, на котором вы развернули СУБД
port : стандартный 3306
user : это логин пользователя
password: пароль
db_name: имя нашей базы данных
Обернем код в блок try/except, в блоке try будем подключаться к БД, а в блоке except будем выводить в терминал возможные ошибки:
main.py
import pymysql try: connection = pymysql.connect( host='127.0.0.1', port=3306, user='first_user', password='qwerty', database='db_name', cursorclass=pymysql.cursors.DictCursor ) print("successfully connected...") print("#" * 20) except Exception as ex: print("Connection refused...") print(ex)
После работы с базой рекомендуется закрывать соединение. Создадим ещё один блок try/finally , внутри блока try мы будем писать наши запросы к БД, а внутри блока finally будем закрывать наше соединение:
main.py
import pymysql try: connection = pymysql.connect( host='127.0.0.1', port=3306, user='first_user', password='qwerty', database='db_name', cursorclass=pymysql.cursors.DictCursor ) print("successfully connected...") print("#" * 20) try: pass finally: connection.close() except Exception as ex: print("Connection refused...") print(ex)
Чтобы начать работать с MySQL , нам нужно создать объект cursor. Это объект, который содержит в себе различные методы для проведения SQL команд. Мы можем как просто положить его значение в переменную cursor = connection.cursor()
, так и воспользоваться контекстным менеджером with. Мне второй вариант нравится больше, так как выглядит лаконичней, да и документация подсказывает нам, как правильно работать с библиотекой:
main.py
import pymysql try: connection = pymysql.connect( host='127.0.0.1', port=3306, user='first_user', password='qwerty', database='db_name', cursorclass=pymysql.cursors.DictCursor ) print("successfully connected...") print("#" * 20) try: # create table with connection.cursor() as cursor: pass finally: connection.close() except Exception as ex: print("Connection refused...") print(ex)
Теперь давайте создадим простую таблицу, на которой сегодня потренируемся. Создаем переменную create_table_query и пишем запрос.
Создать таблицу users со следующими строками:
id типа int со значением, auto increment
name типа varchar
password типа varchar
email также типа varchar
primary key у нас будет поле id
main.py
# create table with connection.cursor() as cursor: create_table_query = "CREATE TABLE `users`(id int AUTO_INCREMENT," " name varchar(32)," " password varchar(32)," " email varchar(32), PRIMARY KEY (id));"
Для того чтобы выполнить запрос на создание таблицы, вызываем у cursor метод execute , и передаем в него наш запрос. Выведем в print сообщение об успешном исполнении:
main.py
# create table with connection.cursor() as cursor: create_table_query = "CREATE TABLE `users`(id int AUTO_INCREMENT," " name varchar(32)," " password varchar(32)," " email varchar(32), PRIMARY KEY (id));" cursor.execute(create_table_query) print("Table created successfully")
Добавление данных в таблицу
Таблицу мы создали, теперь давайте заполним её данными. За добавление данных в таблицу в SQL отвечает метод INSERT . Пишем запрос. Дословно говорим:
Вставить в таблицу users , перечисляем поля, которые хотим заполнить, а затем данные, которыми мы хотим наполнить запись в таблице.
Например, у нас будет пользователь Анна , с паролем qwerty и почтой от gmail:
main.py
# insert data with connection.cursor() as cursor: insert_query = "INSERT INTO `users` (name, password, email) VALUES ('Anna', 'qwerty', 'anna@gmail.com');"
Вызываем метод execute у cursor и передаем в него наш запрос. Для того чтобы наши данные занеслись в таблицу и сохранились там, нам нужно закоммитить или зафиксировать наш запрос. Вызываем метод commit у объекта connection :
main.py
# insert data with connection.cursor() as cursor: insert_query = "INSERT INTO `users` (name, password, email) VALUES ('Anna', 'qwerty', 'anna@gmail.com');" cursor.execute(insert_query) connection.commit()
Теперь в нашей таблице создалась одна запись с пользователем Анна .
Извлечение данных из таблицы
Напишем запрос на извлечение всех данных из таблицы. Звездочка в данном запросе забирает все, что есть в таблице:
main.py
# select all data from table with connection.cursor() as cursor: select_all_rows = "SELECT * FROM `users`" cursor.execute(select_all_rows)
У cursor есть замечательный метод fetchall , который извлекает из таблицы все строки. Нам лишь остается пробежаться по ним циклом и распечатать.
main.py
# select all data from table with connection.cursor() as cursor: select_all_rows = "SELECT * FROM `users`" cursor.execute(select_all_rows) rows = cursor.fetchall() for row in rows: print(row) print("#" * 20)
Удаление данных из таблицы
Напишем запрос на удаление. Говорим: Удалить запись из таблицы users, где id равен 1 . У нас ведь пока только одна запись:
main.py
# delete data with connection.cursor() as cursor: delete_query = "DELETE FROM `users` WHERE id = 5;" cursor.execute(delete_query) connection.commit()
Удаление таблицы
Последний запрос, который мы выполним. Давайте дропним нашу таблицу. Под словом дропнут подразумевается удаление всей таблицы целиком. Будьте аккуратны: данному запросу, как и запросу на создание таблицы, коммит не требуется:
main.py
# drop table with connection.cursor() as cursor: drop_table_query = "DROP TABLE `users`;" cursor.execute(drop_table_query)
Полный код файла main.py:
import pymysql try: connection = pymysql.connect( host='127.0.0.1', port=3306, user='first_user', password='qwerty', database='db_name', cursorclass=pymysql.cursors.DictCursor ) print("successfully connected...") print("#" * 20) try: # create table with connection.cursor() as cursor: create_table_query = "CREATE TABLE `users`(id int AUTO_INCREMENT," " name varchar(32)," " password varchar(32)," " email varchar(32), PRIMARY KEY (id));" cursor.execute(create_table_query) print("Table created successfully") insert data with connection.cursor() as cursor: insert_query = "INSERT INTO `users` (name, password, email) VALUES ('Anna', 'qwerty', 'anna@gmail.com');" cursor.execute(insert_query) connection.commit() # delete data with connection.cursor() as cursor: delete_query = "DELETE FROM `users` WHERE id = 5;" cursor.execute(delete_query) connection.commit() # drop table with connection.cursor() as cursor: drop_table_query = "DROP TABLE `users`;" cursor.execute(drop_table_query) # select all data from table with connection.cursor() as cursor: select_all_rows = "SELECT * FROM `users`" cursor.execute(select_all_rows) rows = cursor.fetchall() for row in rows: print(row) print("#" * 20) finally: connection.close() except Exception as ex: print("Connection refused...") print(ex)
Подведение итогов
Теперь вы знаете как можно подключаться к СУБД MySQL с помощью Python, а также выполнять любые запросы, включая создание таблиц, занесение в них данных, а также удаление строк и самих таблиц.
Надеюсь, статья вам помогла и вы узнали что-то новое. 👍
***
Материалы по теме
🐍🐬 Python и MySQL: практическое введение
Как подружить Python и базы данных SQL. Подробное руководство