Подключение к MariyDB/MySQL с помощью модуля pyMySQL в Python (Питон)

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

1import pymysql

Для этого потребуется импортировать pymysql модуль. Python con = pymysql.connect(‘localhost’, ‘user17’, ‘s$cret’, ‘mydb’)

12con = pymysql.connect(‘localhost’, ‘user17’,     ‘s$cret’, ‘mydb’)

Затем производится подключение к базе данных при помощи connect(). Здесь требуется указать четыре параметра:

  • имя хоста;
  • имя пользователя;
  • пароль;
  • название базы данных.

Python with con:

1with con:

При помощи with интерпретатор Python автоматически открывает доступные ресурсы. Он также обрабатывает возможные ошибки. Python cur = con.cursor()

1cur = con.cursor()

Из объекта подключения con создается курсор. Курсор используется для перемещения записей из набора результатов. Python cur.execute(«SELECT VERSION()»)

1cur.execute(«SELECT VERSION()»)

Для использования команды SQL вызывается метод курсора execute(). Python version = cur.fetchone()

1version = cur.fetchone()

Метод fetchone() позволяет вызвать следующую строку из набора результатов запроса, показывая только одну запись. В том случае, если доступных данных нет, выводится None. Python print(«Database version: {}».format(version[0]))

1print(«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»)

1cur.execute(«SELECT * FROM cities»)

Данный оператор SQL выбирает все данные из таблицы cities.
Python rows = cur.fetchall()

1rows = cur.fetchall()

Метод fetchall() позволяет получить все записи. Он возвращает набор результатов. Технически, это кортеж из кортежей. Каждый из внутренних кортежей представляет собой строку в таблице.
Python for row in rows: print(«{0} {1} {2}».format(row[0], row[1], row[2]))

12for 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)

123456con = 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»])

12for 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

1desc = cur.description

Атрибут курсора description возвращает информацию о каждом результативном столбце запроса. Python print(«{0:>3} {1:>10}».format(desc[0][0], desc[1][0]))

1print(«{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]))

12for 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)

1cur.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))

1print(«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.

Leave a Comment

13 − 12 =