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.