Работа с 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 © Все права защищены 2022

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