PyMySQL представляет собой уникальную для Python клиентскую библиотеку, основанную на PEP 249. Большая часть общедоступных API совместимы с mysqlclient и MySQLdb. PyMySQL работает с MySQL 5.5+ и MariaDB 5.5+.
Установка PyMySQL в среде программирования pyCharm
Shell $ sudo pip3 install PyMySQL
1 | $ sudo pip3 install PyMySQL |
Для установки PyMySQL используется pip3.
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Telegram Чат & Канал
Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!
Паблик VK
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
PyMySQL — узнаем версию MySQL
В следующем примере показано, как отобразить текущую версию MySQL. Python #!/usr/bin/python3 # -*- coding: utf-8 -*- import pymysql con = pymysql.connect(‘localhost’, ‘user17’, ‘s$cret’, ‘mydb’) with con: cur = con.cursor() cur.execute(«SELECT VERSION()») version = cur.fetchone() print(«Database version: {}».format(version[0]))
12345678910111213141516 | #!/usr/bin/python3# -*- coding: utf-8 -*- import pymysql con = pymysql.connect(‘localhost’, ‘user17’, ‘s$cret’, ‘mydb’) with con: cur = con.cursor() cur.execute(«SELECT VERSION()») version = cur.fetchone() print(«Database version: {}».format(version[0])) |
Для того чтобы узнать версию MySQL, можно использовать команду SELECT VERSION()
. Python import pymysql
1 | import pymysql |
Для этого потребуется импортировать pymysql
модуль. Python con = pymysql.connect(‘localhost’, ‘user17’, ‘s$cret’, ‘mydb’)
12 | con = pymysql.connect(‘localhost’, ‘user17’, ‘s$cret’, ‘mydb’) |
Затем производится подключение к базе данных при помощи connect()
. Здесь требуется указать четыре параметра:
- имя хоста;
- имя пользователя;
- пароль;
- название базы данных.
Python with con:
1 | with con: |
При помощи with
интерпретатор Python автоматически открывает доступные ресурсы. Он также обрабатывает возможные ошибки. Python cur = con.cursor()
1 | cur = con.cursor() |
Из объекта подключения con
создается курсор. Курсор используется для перемещения записей из набора результатов. Python cur.execute(«SELECT VERSION()»)
1 | cur.execute(«SELECT VERSION()») |
Для использования команды SQL вызывается метод курсора execute()
. Python version = cur.fetchone()
1 | version = cur.fetchone() |
Метод fetchone()
позволяет вызвать следующую строку из набора результатов запроса, показывая только одну запись. В том случае, если доступных данных нет, выводится None
. Python print(«Database version: {}».format(version[0]))
1 | print(«Database version: {}».format(version[0])) |
Таким образом, версия базы данных выводится на экран. Shell $ ./version.py Database version: 5.7.23-0ubuntu0.16.04.1
12 | $ ./version.py Database version: 5.7.23-0ubuntu0.16.04.1 |
Это результат вывода.
PyMySQL fetchAll
Метод fetchAll()
позволяет извлечь все (оставшиеся) строки результата запроса, возвращая их в виде последовательности последовательностей. Python #!/usr/bin/python3 # -*- coding: utf-8 -*- import pymysql con = pymysql.connect(‘localhost’, ‘user17’, ‘s$cret’, ‘testdb’) with con: cur = con.cursor() cur.execute(«SELECT * FROM cities») rows = cur.fetchall() for row in rows: print(«{0} {1} {2}».format(row[0], row[1], row[2]))
1234567891011121314151617 | #!/usr/bin/python3# -*- coding: utf-8 -*- import pymysql con = pymysql.connect(‘localhost’, ‘user17’, ‘s$cret’, ‘testdb’) with con: cur = con.cursor() cur.execute(«SELECT * FROM cities») rows = cur.fetchall() for row in rows: print(«{0} {1} {2}».format(row[0], row[1], row[2])) |
В данном примере из таблицы базы данных выводятся все города (cities).
Python cur.execute(«SELECT * FROM cities»)
1 | cur.execute(«SELECT * FROM cities») |
Данный оператор SQL выбирает все данные из таблицы cities
.
Python rows = cur.fetchall()
1 | rows = cur.fetchall() |
Метод fetchall()
позволяет получить все записи. Он возвращает набор результатов. Технически, это кортеж из кортежей. Каждый из внутренних кортежей представляет собой строку в таблице.
Python for row in rows: print(«{0} {1} {2}».format(row[0], row[1], row[2]))
12 | for row in rows: print(«{0} {1} {2}».format(row[0], row[1], row[2])) |
Данные выводятся в консоль строка за строкой.
Shell $ ./retrieve_all.py 1 Bratislava 432000 2 Budapest 1759000 3 Prague 1280000 4 Warsaw 1748000 5 Los Angeles 3971000 6 New York 8550000 7 Edinburgh 464000 8 Berlin 3671000
123456789 | $ ./retrieve_all.py 1 Bratislava 4320002 Budapest 17590003 Prague 12800004 Warsaw 17480005 Los Angeles 39710006 New York 85500007 Edinburgh 4640008 Berlin 3671000 |
Это результат вывода.
PyMySQL словарь курсора
По умолчанию курсор возвращает данные в кортеж из кортежей. При использовании словаря курсора данные отправляются в форму, которая используется словарями Python. В таком случае появляется возможность обращения к данным посредством названий их столбцов. Python #!/usr/bin/python3 # -*- coding: utf-8 -*- import pymysql import pymysql.cursors con = pymysql.connect(host=’localhost’, user=’user17′, password=’s$cret’, db=’mydb’, charset=’utf8mb4′, cursorclass=pymysql.cursors.DictCursor) with con: cur = con.cursor() cur.execute(«SELECT * FROM cities») rows = cur.fetchall() for row in rows: print(row[«id»], row[«name»])
12345678910111213141516171819202122 | #!/usr/bin/python3# -*- coding: utf-8 -*- import pymysqlimport pymysql.cursors con = pymysql.connect(host=’localhost’, user=’user17′, password=’s$cret’, db=’mydb’, charset=’utf8mb4′, cursorclass=pymysql.cursors.DictCursor) with con: cur = con.cursor() cur.execute(«SELECT * FROM cities») rows = cur.fetchall() for row in rows: print(row[«id»], row[«name»]) |
В данном примере показано, как получить первые строки таблицы cities
при помощи использования словаря курсора. Python con = pymysql.connect(host=’localhost’, user=’user17′, password=’s$cret’, db=’mydb’, charset=’utf8mb4′, cursorclass=pymysql.cursors.DictCursor)
123456 | con = pymysql.connect(host=’localhost’, user=’user17′, password=’s$cret’, db=’mydb’, charset=’utf8mb4′, cursorclass=pymysql.cursors.DictCursor) |
Используя метод connect()
, можно передать значение pymysql.cursors.DictCursor
параметру cursorclass
. Python for row in rows: print(row[«id»], row[«name»])
12 | for row in rows: print(row[«id»], row[«name»]) |
Обращение к данным происходит при помощи названий столбцов таблицы cities
.
PyMySQL заголовки столбцов
Далее будет показано, как вывести названия столбцов с информацией из таблицы базы данных. Python #!/usr/bin/python3 # -*- coding: utf-8 -*- import pymysql con = pymysql.connect(‘localhost’, ‘user17’, ‘s$cret’, ‘testdb’) with con: cur = con.cursor() cur.execute(«SELECT * FROM cities») rows = cur.fetchall() desc = cur.description print(«{0:>3} {1:>10}».format(desc[0][0], desc[1][0])) for row in rows: print(«{0:3} {1:>10}».format(row[0], row[2]))
123456789101112131415161718192021 | #!/usr/bin/python3# -*- coding: utf-8 -*- import pymysql con = pymysql.connect(‘localhost’, ‘user17’, ‘s$cret’, ‘testdb’) with con: cur = con.cursor() cur.execute(«SELECT * FROM cities») rows = cur.fetchall() desc = cur.description print(«{0:>3} {1:>10}».format(desc[0][0], desc[1][0])) for row in rows: print(«{0:3} {1:>10}».format(row[0], row[2])) |
Названия столбцов представляют собой метаданные. Они извлекаются из объекта курсора. Python desc = cur.description
1 | desc = cur.description |
Атрибут курсора description
возвращает информацию о каждом результативном столбце запроса. Python print(«{0:>3} {1:>10}».format(desc[0][0], desc[1][0]))
1 | print(«{0:>3} {1:>10}».format(desc[0][0], desc[1][0])) |
Таким образом, выводятся и форматируются названия столбцов таблицы. Python for row in rows: print(«{0:3} {1:>10}».format(row[0], row[2]))
12 | for row in rows: print(«{0:3} {1:>10}».format(row[0], row[2])) |
Данные перебираются и выводятся на экран при помощи цикла for. Shell $ ./column_headers.py id name 1 432000 2 1759000 3 1280000 4 1748000 5 3971000 6 8550000 7 464000 8 3671000
12345678910 | $ ./column_headers.py id name 1 432000 2 1759000 3 1280000 4 1748000 5 3971000 6 8550000 7 464000 8 3671000 |
Это результат вывода.
PyMySQL связываемые переменные
При написании связываемых переменных вместо прямого введения значений используется специальные плейсхолдеры (placeholders). Связываемые переменные позволяют повысить безопасность и производительность. Python #!/usr/bin/python3 # -*- coding: utf-8 -*- import pymysql con = pymysql.connect(‘localhost’, ‘user17’, ‘s$cret’, ‘testdb’) # user input myid = 4 with con: cur = con.cursor() cur.execute(«SELECT * FROM cities WHERE id=%s», myid) cid, name, population = cur.fetchone() print(cid, name, population)
12345678910111213141516171819 | #!/usr/bin/python3# -*- coding: utf-8 -*- import pymysql con = pymysql.connect(‘localhost’, ‘user17’, ‘s$cret’, ‘testdb’) # user inputmyid = 4 with con: cur = con.cursor() cur.execute(«SELECT * FROM cities WHERE id=%s», myid) cid, name, population = cur.fetchone() print(cid, name, population) |
В данном примере показано, как получить строку с определенным Id. Python cur.execute(«SELECT * FROM cities WHERE id=%s», myid)
1 | cur.execute(«SELECT * FROM cities WHERE id=%s», myid) |
Здесь используется плейсхолдер, который идентифицируется при помощи маркера %s. Перед тем, как определенная SQL переменная будет задействована, она должна быть привязана к ее плейсхолдеру. Shell $ ./prepared_statement.py 4 Warsaw 1748000
12 | $ ./prepared_statement.py 4 Warsaw 1748000 |
Это результат вывода.
PyMySQL задействованные строки
Предназначенный только для чтения атрибут курсор rowcount
показывает количество строк, которые были получены в результате последнего использования одного из операторов SELECT, UPDATE или INSERT. Python #!/usr/bin/python3 # -*- coding: utf-8 -*- import pymysql con = pymysql.connect(‘localhost’, ‘user17’, ‘s$cret’, ‘mydb’) with con: cur = con.cursor() cur.execute(«SELECT * FROM cities WHERE id IN (1, 2, 3)») # rows = cur.fetchall() # for row in rows: # print(«{0} {1} {2}».format(row[0], row[1], row[2])) print(«The query affected {} rows».format(cur.rowcount))
12345678910111213141516171819 | #!/usr/bin/python3# -*- coding: utf-8 -*- import pymysql con = pymysql.connect(‘localhost’, ‘user17’, ‘s$cret’, ‘mydb’) with con: cur = con.cursor() cur.execute(«SELECT * FROM cities WHERE id IN (1, 2, 3)») # rows = cur.fetchall() # for row in rows: # print(«{0} {1} {2}».format(row[0], row[1], row[2])) print(«The query affected {} rows».format(cur.rowcount)) |
В данном примере, показано, что используемый оператор SELECT
выбирает три строки. Python print(«The query affected {} rows».format(cur.rowcount))
1 | print(«The query affected {} rows».format(cur.rowcount)) |
Таким образом, составляется сообщение, в котором показывается количество задействованных строк. Shell $ ./affected_rows.py The query affected 3 rows
12 | $ ./affected_rows.py The query affected 3 rows |
Это результат вывода.
В данной инструкции было показано, как использовать базу данных MySQL в Python при помощи модуля PyMySQL.