🐍🐬 Python + MySQL: как подключиться к СУБД MySQL и работать с ней с помощью Python

Из этой статьи вы узнаете, как подключиться к MySQL с помощью Python и выполнить основные команды для работы с данными в таблице: установка необходимых библиотек, подключение к базе данных, создание и удаление таблицы, добавление, извлечение и удаление данных из таблицы.

Введение

Сегодня мы рассмотрим на практике, как можно всего в несколько строк кода подключиться к СУБД 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, а также выполнять любые запросы, включая создание таблиц, занесение в них данных, а также удаление строк и самих таблиц.

Надеюсь, статья вам помогла и вы узнали что-то новое. 👍

***

Материалы по теме

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ

admin
11 декабря 2018

ООП на Python: концепции, принципы и примеры реализации

Программирование на Python допускает различные методологии, но в его основе...
admin
23 февраля 2017

SQL за 20 минут

Предлагаем вашему вниманию статью с кричащим названием "SQL за 20 минут". К...
admin
13 февраля 2017

Программирование на Python: от новичка до профессионала

Пошаговая инструкция для всех, кто хочет изучить программирование на Python...