Работа с MySQL в Python

MySQL по-прежнему остаётся лидером среди реляционных баз данных (OpenSource), поэтому давайте узнаем как с ней работать через Python.

Мы будем использовать модуль pymysql. Установим его:

$ pip install pymysql

Теперь создадим тестовую базу, нового пользователя, дадим ему права на базу, создадим таблицу и наполним ее данными. Для этого подключаемся к mysql:

$ mysql -uroot -p

mysql> create database demobase;
mysql> use demobase;
mysql> grant all on demobase.* to usr@localhost;
mysql> create table t1 (id int, fname varchar(100), lname varchar(100), age int);
mysql> insert into t1 (id, fname, lname, age) values (1, 'Ivan', 'Ivanov', 50);
mysql> insert into t1 (id, fname, lname, age) values (2, 'Petr', 'Petrov', 35);
mysql> insert into t1 (id, fname, lname, age) values (3, 'Aleksandr', 'Aleksandrov', 28);
mysql> SELECT * FROM `t1`;

Получим следующее:

+----+-----------+-------------+-----+
| id | fname | lname | age |
+----+-----------+-------------+-----+
| 1 | Ivan | Ivanov | 50 |
| 2 | Petr | Petrov | 35 |
| 3 | Aleksandr | Aleksandrov | 28 |
+----+-----------+-------------+-----+
3 rows in set (0.00 sec)

Отлично. Теперь перейдем к Python. Попробуем подключиться к базе:

import pymysql
connection = pymysql.connect('localhost', 'usr', 'pa$$word', 'demobase')
print ("Connect successful!")

Проверим. Получили “Connect successful!”. Идем дальше. Прочитаем содержимое таблицы t1:

import pymysql
connection = pymysql.connect('localhost', 'usr', 'pa$$word', 'demobase')
with connection.cursor() as cursor:
sql = "SELECT * FROM `t1`"
cursor.execute(sql)
for row in cursor:
print(row)
connection.close()

На выходе получаем кортежи:

(1, 'Ivan', 'Ivanov', 50)
(2, 'Petr', 'Petrov', 35)
(3, 'Aleksandr', 'Aleksandrov', 28)

Ок. Теперь выведем тех, кто старше 30 лет:

import pymysql
connection = pymysql.connect('localhost', 'usr', 'pa$$word', 'demobase')
with connection.cursor() as cursor:
sql = "SELECT * FROM `t1`"
cursor.execute(sql)
for row in cursor:
if row[3] > 30:
print(row[1]+' '+row[2])
connection.close()

Получаем:

Ivan Ivanov
Petr Petrov

Отлично. Теперь поместим данные в таблицу. Добавим еще одного человека Gavrila Gavrilov и ему будет 78 лет:

import pymysql
connection = pymysql.connect('localhost', 'usr', 'pa$$word', 'demobase')
with connection.cursor() as cursor:
sql = "INSERT INTO t1 (id, fname, lname, age) values (4, 'Gavrila', 'Gavrilov', 78);"
cursor.execute(sql)
connection.commit()
connection.close()

Заметили, что добавилось connection.commit()? Это нужно для применения изменений. По-умолчанию изменения не применяются. Проверим, что получилось (это мы делали выше):

(1, 'Ivan', 'Ivanov', 50)
(2, 'Petr', 'Petrov', 35)
(3, 'Aleksandr', 'Aleksandrov', 28)
(4, 'Gavrila', 'Gavrilov', 78)

Похоже, что все хорошо. Аналогичным образом выполняем любые запросы SQL через Python. 


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Unlix © Все права защищены 2023

Копирование материалов с сайта Unlix.ru без указания полной ссылки на источник ЗАПРЕЩЕНО!