Python + MySQL: как подключиться к СУБД MySQL и работать с ней с помощью Python
MySQL – одна из наиболее широко используемых баз данных в python, обеспечивающая поддержку работы.
Прежде всего, нам нужно установить пакет соединителя mysql в python. Чтобы установить пакет mysql, выполните следующие действия: перейдите в каталог Scripts в файле python. В моем случае:
D: Программное обеспечение Python Python36-32 Scripts
Откройте командную строку здесь. Затем дайте следующую команду:
D:SoftwarePythonPython36-32Scripts> pip install pymysql
Вот и все, пакет коннектора python mysql установлен.
Подключение к базе данных
Я использую xampp для своей базы данных. Это необязательный шаг, если у вас уже установлен MySQL, вы можете пропустить этот шаг.
Перед началом кодирования запустите панель управления xampp и запустите Apache MySQL. В браузере я создал базу данных с именем databaseName, которая показана ниже:
Пример
Сначала нам нужно установить соединение с mysql. Следующее будет подключаться к базе данных mysql в программе python.
import pymysql
#database connection
connection = pymysql.connect(host=»localhost»,user=»root»,passwd=»»,database=»databaseName» )
cursor = connection.cursor()
# some other statements with the help of cursor
connection.close()
Сначала мы импортировали pymysql, а затем установили соединение. Pymysql.connect() принимает четыре аргумента. Первое – это имя хоста, то есть localhost, а остальные три такие, как они объявлены. Используя это соединение, мы создали курсор, который будет использоваться для разных запросов.
Пример создания таблицы
Давайте теперь создадим таблицу с именем Artist, содержащую столбцы – name, id и track.
import pymysql
#database connection
connection = pymysql.connect(host=»localhost», user=»root», passwd=»», database=»databaseName»)
cursor = connection.cursor()
# Query for creating table
ArtistTableSql = «»»CREATE TABLE Artists(
ID INT(20) PRIMARY KEY AUTO_INCREMENT,
NAME CHAR(20) NOT NULL,
TRACK CHAR(10))»»»
cursor.execute(ArtistTableSql)
connection.close()
Вставка
Теперь нас интересует вставка некоторых строковых сущностей в таблицу. Сначала нужно написать запросы на вставку разных данных, а затем выполнить их с помощью курсора.
import pymysql
#database connection
connection = pymysql.connect(host=»localhost», user=»root», passwd=»», database=»databaseName»)
cursor = connection.cursor()
# queries for inserting values
insert1 = «INSERT INTO Artists(NAME, TRACK) VALUES('Towang', 'Jazz' );»
insert2 = «INSERT INTO Artists(NAME, TRACK) VALUES('Sadduz', 'Rock' );»
#executing the quires
cursor.execute(insert1)
cursor.execute(insert2)
#commiting the connection then closing it.
connection.commit()
connection.close()
Выбор
Мы вставили две строки в приведенный выше код. Теперь мы хотим их получить. Для этого взгляните на следующий пример:
import pymysql
#database connection
connection = pymysql.connect(host=»localhost», user=»root», passwd=»», database=»databaseName»)
cursor = connection.cursor()
# queries for retrievint all rows
retrive = «Select * from Artists;»
#executing the quires
cursor.execute(retrive)
rows = cursor.fetchall()
for row in rows:
print(row)
#commiting the connection then closing it.
connection.commit()
connection.close()
Обновление
Предположим, вы хотите переименовать имя первого художника из Тованга в Тауванг. Чтобы обновить любой атрибут любого объекта, сделайте следующее:
updateSql = «UPDATE Artists SET NAME= 'Tauwang' WHERE ID = '1' ;»
cursor.execute(updateSql )
Удаление
Чтобы удалить объект, вы должны выполнить следующее:
deleteSql = «DELETE FROM Artists WHERE ID = '1'; »
cursor.execute(deleteSql )
Пример Drop Table
Иногда вам может потребоваться удалить любую таблицу перед созданием новой, чтобы избежать конфликта имен. Чтобы удалить таблицу исполнителей, вы можете сделать это следующим образом:
dropSql = «DROP TABLE IF EXISTS Artists;»
cursor.execute(dropSql)
Тогда таблица Artists будет удалена из базы данных databaseName.
Как подключиться к базе данных MySQL из Python с примерами
Вы говорите — время идёт. Безумцы — это вы проходите (Талмуд).
0 0 голоса
Рейтинг статьи
Из программы на Python, вы можете подключиться к базе данных MySQL, чтобы получить доступ к таблицам и манипулировать данными.
Для этого, вы должны использовать одну из библиотек Python MySQL. Хотя есть некоторые из этих библиотек доступны, наиболее популярной и стабильной является библиотека mysql-connector-python.
Библиотека mysql-connector-python использует API-интерфейсы, которые совместимы со спецификацией API базы данных в Python v2.0 (PEP 249). Кроме того, эта библиотека сама по себе написана в программе Python и не имеет каких-либо других внешних зависимостей, что делает легче ее поддерживать.
В этом руководстве объясняется, как установить библиотеку mysql-connector-python. Мы также предоставили программу примера Python, который показывает, как использовать API для подключения к базе данных MySQL и извлекать данные из таблиц.
1. Установка соединения с MySQL
Библиотека mysql-connector-python доступна для всех разновидностей Linux, включая CentOS, Debian, Ubuntu, RedHat. Она также доступна для Windows.
Вы можете скачать mysql-connector-python здесь.
В следующем примере я использую команду wget, чтобы непосредственно скачать файл RPM для установки его на CentOS 7.
# wget http://cdn.mysql.com//Downloads/Connector-Python/mysql-connector-python-2.1.3-1.el7.x86_64.rpm
Затем, используя команду rpm, установите библиотеку mysql-connector-python, как показано ниже. Она не имеет какие — либо другие дополнительные зависимости пакета. Все, что вам нужно, это просто этот пакет.
# rpm -ivh mysql-connector-python-2.1.3-1.el7.x86_64.rpm
Preparing… ############# [100%]
Updating / installing…
1:mysql-connector-python-2.1.3-1.el################# [100%]
2. Проверьте установку библиотеки Python MySQL
В следующем примере, этот сервер имеет установку Python версии 2.7.5.
# python -V
Python 2.7.5
Затем используйте функцию get_python_lib, чтобы получить каталог, где будут установлены все библиотеки Python. Перед тем, как можно будет использовать функцию get_python_lib, вы должны также импортировать эту функцию, как показано ниже.
# python
>>> from distutils.sysconfig import get_python_lib
>>> print get_python_lib()
/usr/lib/python2.7/site-packages
Как мы видим из приведенного выше вывода, на данной системе установлена библиотека Python в каталоге /usr/lib/python2.7/site-packages. Проверьте, есть ли у нас mysql_connector_python доступен в этом каталоге, как показано ниже.
# ls -l /usr/lib/python2.7/site-packages | grep -i mysql
drwxr-xr-x. 3 root root 78 Jun 7 10:23 mysql
-rw-r—r—. 1 root root 1499 Sep 14 2016 mysql_connector_python-2.1.3-py2.7.egg-info
При выполнении любой команды из командной строки Python, не дают места перед командой. Если у вас есть какое-либо дополнительное пространство в передней части «print», он будет отображать сообщение об ошибке «IndentationError: unexpected indent».
>>> print get_python_lib()
File «», line 1
print get_python_lib()
^
IndentationError: unexpected indent
Кроме того, если вы пытаетесь выполнить get_python_lib без импорта, вы увидите следующее сообщение об ошибке.
>>> print get_python_lib()
NameError: name 'get_python_lib' is not defined
3. Проверка загрузки библиотеки MySQL в Python
Далее, давайте убедитесь, что библиотеку MySQL, мы установили действительно, и мы можем импортировать ее без какого-либо вопроса. Если следующий импорт mysql.
connector не возвращает сообщение об ошибке, то это означает, что Python теперь может получить доступ к библиотеке подключения MySQL и импортировать ее без каких-либо проблем.
С этого момента, вы можете начать использовать любые команды библиотеки Python MySQL и получить данные.
# python
>>> import mysql.connector
>>> exit();
Если вы получите следующее сообщение об ошибке, то что-то не так с установкой библиотеки Python MySQL.
>>> import mysql.connector
ImportError: No module named mysql.connector
4. Подключение к базе данных MySQL из программы на Python
Далее, давайте быстро напишем небольшой образец программы на Python, которая будет подключаться к конкретной базе данных MySQL, используя имя пользователя и пароль.
В следующем примере, программа Python попытается подключиться к базе данных MySQL под названием «andreyex», которая работает на локальном хосте (127.0.0.1), с заданным именем и паролем.
Mysql.connector.connect является библиотечной функцией MySQL-Python, которая будет создавать эту связь, как показано ниже. Эта функция возвращает объект подключения, который мы храним в переменной «conn». Прежде чем мы можем вызвать любую из функций библиотеки MySQL, мы должны сначала импортировать библиотеку с помощью “import mysql.connector”, как показано в примере ниже.
Позже мы можем использовать переменную «conn» для вызова других функций библиотеки MySQL Python для манипулирования данными в таблицах. Наконец, мы используем conn.Close(), которая просто закроет соединение MySQL, которое было открыто.
# cat con-test.py
import mysql.connector
conn = mysql.connector.connect(
user='root',
password='Dev$SQL2Pwd',
host='127.0.0.1',
database='andreyex')
conn.close()
Если вы пытаетесь подключиться к базе данных MySQL, которая работает на другом сервере, то измените IP-адрес в параметре хоста.
Если вы выполните вышеприведенный пример программы, Python, если он не возвращает сообщение об ошибке, как показано ниже, то это означает, что программа успешно выполнила подключение к данной базе данных MySQL, используя данное имя пользователя и пароль.
# python con-test.py
#
Если есть ошибка во время установки соединения, то будет сгенерировано сообщение об ошибке, как показано ниже. В следующем примере, выдаст сообщение об ошибке «Access denied», это означает, что данное сочетание имя пользователя и пароль недействительно.
# python con-test.py
Traceback (most recent call last):
File «my.py», line 5, in
database='test')
File «/usr/lib/python2.7/site-packages/mysql/connector/__init__.py», line 179, in connect
return MySQLConnection(*args, **kwargs)
File «/usr/lib/python2.7/site-packages/mysql/connector/connection.py», line 95, in __init__
self.connect(**kwargs)
File «/usr/lib/python2.7/site-packages/mysql/connector/abstracts.py», line 719, in connect
self._open_connection()
File «/usr/lib/python2.7/site-packages/mysql/connector/connection.py», line 210, in _open_connection
self._ssl)
File «/usr/lib/python2.7/site-packages/mysql/connector/connection.py», line 144, in _do_auth
self._auth_switch_request(username, password)
File «/usr/lib/python2.7/site-packages/mysql/connector/connection.py», line 177, in _auth_switch_request
raise errors.get_exception(packet)
mysql.connector.errors.ProgrammingError: 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
5. Получить записи из таблицы MySQL с помощью скрипта в Python
Следующий пример расширяет программу Python. В этом примере скрипт Python, подключиться к базы данных MySQL «andreyex», и извлечет данные из таблицы сотрудников, а также отобразит их.
# cat employee.py
import mysql.connector
conn = mysql.connector.connect(
user='root',
password='Dev$SQL&Pwd',
host='127.0.0.1',
database='andreyex')
cur = conn.cursor()
query = («SELECT * FROM employee»)
cur.execute(query)
for (id, name, dept, salary) in cur:
print(«{}, {}, {}, {}».format(id, name,dept,salary))
cur.close()
conn.close()
В приведенном выше примере программы Python:
- import mysql.connector – Импортирует библиотеку соединения MySQL в Python.
- conn = mysql.connector.connect – Подключается к определенной базе данных MySQL, используя данное имя БД, имя пользователя, пароль и хост. Возвращает объект соединения, который хранится в переменной «conn».
- cur = conn.cursor() – С помощью объекта соединения, который мы только что создали, мы создаем новый курсор для извлечения и манипулирования нашим запросом. Объект cursor будет храниться в переменной «cur».
- query = (“SELECT … ) – Здесь мы определяем наш запрос MySQL. В этом примере, мы просто выбираем все записи из таблицы сотрудников. Если вы хотите использовать другой вариант команды SELECT, то будет полезно прочитать: 25 примеров команды SELECT в MySQL.
- cur.execute(query) – Использование переменной «cur» курсор, которую мы создали выше, будет выполнять данный запрос. Поскольку курсор уже привязан к конкретному соединению, она точно знает, где необходимо выполнять запроса SQL и получить соответствующей результат.
- for (…) in cur – Эта команда просто перебирает курсор, и получает все значения в строках и сохраняет их в данном параметре. Так как эта таблица имеет 4 колонки, есть 4 переменные, определенные внутри цикла. Т.е. идентификатор, имя, отдел и размер заработной платы.
- print(“…”.format()) – Эта команда печати вызывается внутри цикла, которая просто выводит значение данных переменных, которые являются значением столбцов, забранным для конкретной строки в таблице сотрудников.
- cur.close и conn.close – Наконец-то, после того, как выполнение цикла закончится, мы просто закроем курсор и соединение, которое мы создали ранее.
Ниже приведен вывод примера программы на Python, который подключится к базе данных MySQL и извлечет строки из данной таблицы.
Подключение к базе данных MySQL с помощью Python
Часто разработчики сталкиваются с задачей подключения к базе данных MySQL при написании программ на Python. Это может быть необходимо для выполнения различных
Часто разработчики сталкиваются с задачей подключения к базе данных MySQL при написании программ на Python. Это может быть необходимо для выполнения различных операций с данными: их чтения, записи, обновления и удаления.
Пример проблемы
Рассмотрим простой пример. Представьте, что имеется база данных MySQL, которая содержит информацию о студентах: их имена, возраст и специальность. Вам нужно написать Python-программу, которая будет подключаться к этой базе, получать данные и выводить их на экран.
Решение
Для подключения к MySQL из Python можно использовать специальный модуль mysql.connector.
Прежде всего, убедитесь, что этот модуль установлен в вашей системе. Если нет, его можно установить с помощью команды pip install mysql-connector-python.
Вот как выглядит базовый код для подключения к базе данных MySQL:
import mysql.connector
cnx = mysql.connector.connect(user='username', password='password',
host='hostname',
database='database_name')
cnx.close()
В этом коде username и password — это имя пользователя и пароль для подключения к базе данных, hostname — это имя хоста, на котором работает сервер MySQL (обычно это localhost), а database_name — это имя базы данных.
После установки соединения с базой данных можно выполнять любые операции. Когда они окончены, важно не забыть закрыть соединение с помощью метода close().
Операции с данными
Чтобы выполнить операцию с данными, например, запросить все записи из таблицы students, можно использовать следующий код:
import mysql.connector
cnx = mysql.connector.connect(user='username', password='password',
host='hostname',
database='database_name')
cursor = cnx.cursor()
query = («SELECT * FROM students»)
cursor.execute(query)
for (name, age, major) in cursor:
print(f»{name}, {age}, {major}»)
cursor.close()
cnx.close()
В этом примере создается курсор, который выполняет SQL-запрос к базе данных. Затем результаты запроса выводятся на экран.
Таким образом, подключение к базе данных MySQL и выполнение операций с данными в Python — это достаточно простая задача, которую можно выполнить с помощью нескольких строк кода и специального модуля mysql.connector.
Python MySQL Tutorial – Полное руководство
Автор оригинала: Pankaj Kumar.
Сегодня в этом уроке мы обсудим как мы можем разработать и интегрировать базу данных Python MySQL.
Что такое MySQL
MySQL -это система управления реляционными базами данных с открытым исходным кодом, которая может использоваться для хранения данных в виде таблиц . Кроме того, таблица представляет собой набор связанных данных, состоящий из столбцов и строк .
MySQL – это широко используемое бесплатное программное обеспечение для баз данных, которое работает на сервере и обеспечивает ряд операций, которые могут быть выполнены над ним. Конечно, мы можем интегрировать MySQL в нашу программу на Python для выполнения транзакций данных через базу данных на сервере MySQL|/.
Установка MySQL на Python
Мы можем использовать Python MySQL , используя различные модули или технологии, уже предоставленные. Некоторые из них,
- MySQL Connector Python
- PyMySQL
- MySQLdb
- mysqlclient
- OurSQL
Все вышеперечисленные технологии используют один и тот же синтаксис и методы для подключения и выполнения операций с базой данных MySQL, следуя PEP 249 .
Следовательно, мы можем получить доступ к базе данных MySQL server, используя любой из вышеперечисленных модулей. Также имеет смысл установить только один из них. Мы можем установить их с помощью простой команды PIP в оболочке, как показано ниже.
Здесь в качестве примера мы взяли PyMySQL .
Перед началом работы убедитесь, что в вашей системе настроена база данных MySQL и она работает правильно. У вас есть логин и пароль для базы данных, чтобы инициировать подключения.
Основные методы в Python MySQL
Теперь , когда мы установили pymysql , давайте рассмотрим некоторые основные методы, которые мы собираемся использовать сегодня.
1. MySQL connect()
Метод pymysql.connect() устанавливает соединение с базой данных MySQL из Python и возвращает объект MySqlConnection .
Затем этот объект можно использовать для доступа ко всей базе данных и выполнения других операций.
Он принимает такие параметры, как хост , пользователь , пароль и база данных в качестве спецификаций базы данных, которую вы хотите подключить.
- пользователь – Для локальных серверов пользователь должен быть указан как “root” , иначе вы можете создать пользователя, перейдя по этой ссылке ,
- пароль – Это зависит от того, что вы использовали в качестве пароля при создании пользователя. База данных также может быть без пароля(для нашего примера),
- host – Для локального сервера, использующего xampp , мы можем использовать localhost для доступа к базе данных. Мы также можем использовать IP адрес сервера или имя для доступа к хосту,
- база данных – Это имя базы данных, которое вы собираетесь использовать. Если вы уже создали базу данных, вы можете просто указать ее имя здесь.
2. Курсор MySQL()
Метод cursor() создает объект cursor , который в дальнейшем может использоваться для выполнения операций CRUD (Создание, извлечение, обновление и удаление) над базой данных.
3. Выполнение MySQL()
Метод execute() выполняет запрос SQL , переданный ему с помощью ранее созданного курсора.
4. Закрытие MySQL()
Метод close () , определенный как в курсоре, так и в классе MySqlConnection , используется для закрытия соответствующих объектов.
5. Фиксация MySQL()
Метод commit() отправляет инструкцию COMMIT на сервер MySQL и, следовательно, фиксирует текущую транзакцию данных.
6. MySQL извлекает все()
Метод fetchall() извлекает все строки результирующего набора запроса и возвращает список кортежей с использованием объекта курсора.
7. MySQL is_connected()
Этот метод проверяет, доступно ли соединение с сервером MySQL. Он возвращает True , если да, и False , если нет.
Начало Работы С Python MySQL
В этом уроке мы будем использовать Xampp Панель управления для подключения к локальному серверу и создания нашей базы данных. Запуск Apache и MySQL в Xampp делает эту работу.
Далее мы можем ударить https://localhost/phpmyadmin/ непосредственно для просмотра интерфейса нашего локального сервера, как показано ниже.
Здесь моя база данных и studentsdb – это некоторые базы данных, которые я создал ранее.
Создание базы данных MySQL на Python
Если у вас нет ранее созданной базы данных, вы можете легко создать ее, выполнив запрос CREATE с помощью метода cursor.execute () . После установления соединения с сервером. Посмотрите на код ниже.
import pymysql
#server connection
mydb = pymysql.connect(
host=»localhost»,
user=»root»,
passwd=»»
)
mycursor = mydb.cursor() #cursor created
#creating database with name classdb
mycursor.execute(«CREATE DATABASE classdb;»)
После выполнения приведенного выше кода вышеуказанное изменение можно увидеть в базе данных с помощью phpMyAdmin . Здесь новая база данных class db успешно создана.
Если у вас уже есть база данных, вы можете легко подключиться к ней, просто указав имя внутри метода connect () . Как показано ниже.
Python and MySQL Database: A Practical Introduction – Real Python
The previous approach is more suitable when the number of records is fairly small and you can write these records directly into the code. But this is rarely true. You’ll often have this data stored in some other file, or the data will be generated by a different script and will need to be added to the MySQL database.
insert_reviewers_query = «»»
INSERT INTO reviewers
(first_name, last_name)
VALUES ( %s, %s )
«»»
reviewers_records = [ («Chaitanya», «Baweja»), («Mary», «Cooper»), («John», «Wayne»), («Thomas», «Stoneman»), («Penny», «Hofstadter»), («Mitchell», «Marsh»), («Wyatt», «Skaggs»), («Andre», «Veiga»), («Sheldon», «Cooper»), («Kimbra», «Masters»), («Kat», «Dennings»), («Bruce», «Wayne»), («Domingo», «Cortes»), («Rajesh», «Koothrappali»), («Ben», «Glocker»), («Mahinder», «Dhoni»), («Akbar», «Khan»), («Howard», «Wolowitz»), («Pinkie», «Petit»), («Gurkaran», «Singh»), («Amy», «Farah Fowler»), («Marlon», «Crafford»),
]
with connection.cursor() as cursor:
cursor.executemany(insert_reviewers_query, reviewers_records)
connection.commit()
In the script above, you pass both the query and the list of records as arguments to .executemany(). These records could have been fetched from a file or from the user and stored in the reviewers_records list.
The code uses %s as a placeholder for the two strings that had to be inserted in the insert_reviewers_query. Placeholders act as format specifiers and help reserve a spot for a variable inside a string. The specified variable is then added to this spot during execution.
insert_ratings_query = «»»
INSERT INTO ratings
(rating, movie_id, reviewer_id)
VALUES ( %s, %s, %s)
«»»
ratings_records = [ (6.4, 17, 5), (5.6, 19, 1), (6.3, 22, 14), (5.1, 21, 17), (5.0, 5, 5), (6.5, 21, 5), (8.5, 30, 13), (9.7, 6, 4), (8.5, 24, 12), (9.9, 14, 9), (8.7, 26, 14), (9.9, 6, 10), (5.1, 30, 6), (5.4, 18, 16), (6.2, 6, 20), (7.3, 21, 19), (8.1, 17, 18), (5.0, 7, 2), (9.8, 23, 3), (8.0, 22, 9), (8.5, 11, 13), (5.0, 5, 11), (5.7, 8, 2), (7.6, 25, 19), (5.2, 18, 15), (9.7, 13, 3), (5.8, 18, 8), (5.8, 30, 15), (8.4, 21, 18), (6.2, 23, 16), (7.0, 10, 18), (9.5, 30, 20), (8.9, 3, 19), (6.4, 12, 2), (7.8, 12, 22), (9.9, 15, 13), (7.5, 20, 17), (9.0, 25, 6), (8.5, 23, 2), (5.3, 30, 17), (6.4, 5, 10), (8.1, 5, 21), (5.7, 22, 1), (6.3, 28, 4), (9.8, 13, 1)
]
with connection.cursor() as cursor: cursor.executemany(insert_ratings_query, ratings_records) connection.commit()
All three tables are now populated with data. You now have a fully functional online movie rating database. The next step is to understand how to interact with this database.
Начало работы с MySQL и Python
Для любого полнофункционального развертываемого приложения постоянство
данных является обязательным. Тривиальный способ хранения данных —
записать их в файл на жестком диске, но по очевидным причинам
предпочтительнее записывать данные, специфичные для приложения, в базу
данных. Python обеспечивает языковую поддержку для записи данных в
широкий спектр баз данных.
API БД Python
В основе поддержки Python для программирования баз данных лежит Python
DB API ( PEP — 249 ),
который не зависит от какого-либо конкретного движка базы данных.
В
зависимости от базы данных, которую мы используем на уровне
персистентности, соответствующая реализация Python DB API должна быть
импортирована и использована в нашей программе.
В этом руководстве мы
продемонстрируем, как использовать Python для подключения к базе данных
MySQL и выполнения с ней транзакций. Для этого мы будем использовать
пакет MySQLdb Python.
Прежде чем мы продолжим подключение к базе данных с помощью Python, нам
необходимо установить коннектор MySQL для Python. Это можно сделать
двумя способами:
- Один из способов — загрузить соответствующий установщик для ОС и
разрядной версии прямо с официального сайта
MySQL . - Другой способ — использовать pip для его установки.
$ pip install mysql-connector-python
Если на локальном компьютере установлена определенная версия MySQL, вам
может потребоваться определенная версия соединителя MySQL, чтобы не
возникало проблем с совместимостью, которые мы можем получить с помощью
следующей команды:
$ pip install mysql-connector-python==
Наконец, нам нужно установить клиентский модуль MySQL, который позволит
нам подключаться к базам данных MySQL из нашего приложения Python,
которое действует как клиент:
$ pip install mysqlclient
Подключение к базе данных
После установки коннектора import MySQLdb не должен вызывать никаких
ошибок при выполнении файла Python.
Предпосылки
Примечание . Предполагается, что читатели имеют базовое понимание
баз данных в целом и базы данных MySQL в частности, а также знания языка
структурированных запросов (SQL). Однако основной процесс создания базы
данных и пользователя был объяснен в этом разделе. Следуй этим шагам:
- Убедитесь, что ваш сервер MySQL запущен. Это можно проверить через
MySQL WorkBench -> Server Status. - Откройте MySQL WorkBench или MySQL CLI. Создайте новую базу данных.
Назовем его pythondb .
CREATE DATABASE pythondb;
USE pythondb;
- Создайте нового пользователя pythonuser с паролем pythonpwd123 и
предоставьте доступ к pythondb
CREATE USER 'pythonuser'@'localhost' IDENTIFIED BY 'pythonpwd123'
GRANT ALL PRIVILEGES ON pythondb.* To 'pythonuser'@'localhost'
FLUSH PRIVILEGES
Проверка вашего подключения к pythondb
Вот простой сценарий, который можно использовать для программного
тестирования подключения к вновь созданной базе данных:
#!/usr/bin/python
import MySQLdb
dbconnect = MySQLdb.connect(«localhost», «pythonuser», «pythonpwd123», «pythondb»)
cursor = dbconnect.cursor()
cursor.execute(«SELECT VERSION()»)
data = cursor.fetchone()
if data:
print('Version retrieved: ', data)
else:
print('Version not retrieved.')
dbconnect.close()
Выход
Version retrieved: 5.7.19
Показанный выше номер версии — это всего лишь фиктивный номер. Он должен
соответствовать версии установленного сервера MySQL.
Давайте подробнее рассмотрим приведенный выше пример программы, чтобы
узнать, как она работает. Во-первых, import MySQLdb используется для
импорта необходимого модуля python.
MySQLdb.connect() принимает имя хоста, имя пользователя, пароль и имя
схемы базы данных для создания соединения с базой данных. При успешном
подключении к базе данных он вернет объект подключения (который здесь
называется dbconnect ).
Используя объект подключения, мы можем выполнять запросы, фиксировать
транзакции и откатывать транзакции перед закрытием соединения.
Как только мы получим объект подключения, нам нужно получить
MySQLCursor , чтобы выполнять запросы с использованием метода
execute Результирующий набор сделки может быть получен с
использованием fetchall , fetchone или fetchmany методы, которые
будут рассмотрены позже в этом руководстве.
Помимо метода execute, существует три важных метода, связанных с
транзакциями базы данных. Мы сейчас вкратце узнаем об этих методах.
Метод dbconnect.commit() информирует базу данных о том, что изменения,
выполненные перед вызовом этой функции, должны быть завершены, и нет
возможности отката к предыдущему состоянию, если транзакция прошла
успешно.
Иногда, если происходит сбой транзакции, нам нужно будет вернуть базу
данных в предыдущее состояние до того, как произошел сбой, чтобы данные
не были потеряны или повреждены. В таком случае нам потребуется откатить
базу данных до предыдущего состояния с помощью dbconnect.rollback() .
Наконец, метод dbconnect.close() используется для закрытия соединения
с базой данных. Для выполнения дальнейших транзакций нам необходимо
создать новое соединение.
Создать новую таблицу
Как только соединение с pythondb будет успешно установлено, мы готовы
перейти к следующему шагу. Создадим в нем новую таблицу:
import MySQLdb
dbconnect = MySQLdb.connect(«localhost»,»pythonuser»,»pythonpwd123″,»pythondb» )
cursor = dbconnect.cursor()
cursor.execute(«DROP TABLE IF EXISTS MOVIE»)
query = «CREATE TABLE MOVIE(
id int(11) NOT NULL,
name varchar(20),
year int(11),
director varchar(20),
genre varchar(20),
PRIMARY KEY (id))»
cursor.execute(query)
dbconnect.close()
После выполнения вышеуказанного сценария вы должны увидеть новый
табличный movie созданный для схемы pythondb . Это можно просмотреть
с помощью MySQL WorkBench.
Выполнение операций CRUD
Теперь мы выполним некоторые операции вставки, чтения, изменения и
удаления во вновь созданной таблице базы данных с помощью скрипта
Python.
Создание новой записи
Следующий сценарий демонстрирует, как вставить новую запись в базу
данных MySQL с помощью сценария Python:
#!/usr/bin/python
import MySQLdb
dbconnect = MySQLdb.connect(«localhost», «pythonuser», «pythonpwd123», «pythondb»)
cursor = dbconnect.cursor()
query = 'insert into movie(id, name, year, director, genre)
values (1, «Bruce Almighty», 2003, «Tom Shaydac», «Comedy»)'
try:
cursor.execute(query)
dbconnect.commit()
except:
dbconnect.rollback()
finally:
dbconnect.close()
Чтение строк из таблицы
После того, как новая строка вставлена в базу данных, вы можете получить
данные тремя способами, используя объект курсора:
- cursor.fetchall() — может использоваться для получения всех строк
- cursor.fetchmany() — может использоваться для получения выбранного
количества строк. - cursor.fetchone() — может использоваться для получения только
первой строки из набора результатов.
Для простоты мы будем использовать SQL-запрос «выбрать все» и
использовать цикл for для набора результатов fetchall для печати
отдельных записей.
#!/usr/bin/python
import MySQLdb
dbconnect = MySQLdb.connect(«localhost», «pythonuser», «pythonpwd123», «pythondb»)
cursor = dbconnect.cursor()
query = «SELECT * FROM movie»
try:
cursor.execute(query)
resultList = cursor.fetchall()
for row in resultList:
print («Movie ID =», row[0])
print («Name =», row[1])
print («Year =», row[2])
print («Director = «, row[3])
print ('Genre = ', row[4])
except:
print («Encountered error while retrieving data from database»)
finally:
dbconnect.close()
Выход:
Movie ID = 1
Name = Bruce Almighty
Year = 2003
Director = Tom Shaydac
Genre = Comedy
Обновление строки
Давайте теперь обновим жанр «Брюса Всемогущего» от комедии до сатиры:
import MySQLdb
dbconnect = MySQLdb.connect(«localhost», «pythonuser», «pythonpwd123», «pythondb»)
# The cursor object obtained below allows SQL queries to be executed in the database session.
cursor = dbconnect.cursor()
updatequery = «update movie set genre = 'Satire' where id = 1»
cursor.execute(updatequery)
dbconnect.commit()
print(cursor.rowcount, «record(s) affected»)
Выход:
1 record(s) affected
Удаление записи
Вот сценарий Python, демонстрирующий, как удалить строку базы данных:
import MySQLdb
dbconnect = MySQLdb.connect(«localhost», «pythonuser», «pythonpwd123», «pythondb»)
# The cursor object obtained below allows SQL queries to be executed in the database session.
cursor = dbconnect.cursor()
updatequery = «DELETE FROM movie WHERE id = 1»
cursor.execute(updatequery)
dbconnect.commit()
print(cursor.rowcount, «record(s) deleted»)
После выполнения вышеуказанного сценария вы должны увидеть следующий
вывод, если все пойдет хорошо.
Выход
1 record(s) deleted
Заключение
В этой статье мы узнали, как использовать Python DB API для подключения
к базе данных. В частности, мы увидели, как можно установить соединение
с базой данных MySQL, используя реализацию MySQLdb API Python DB. Мы
также узнали, как выполнять транзакции с базой данных.
Работа с MySQL в Python
Ранее я уже писал статью про работу с PostgreSQL из Python. Сегодняшний пост будет посвящен другой популярной базе данных MySQL. Мой путь в веб-программирование был классическим: PHP, MySQL и Apache.
Среди php-разработчиков MySQL пользуется большей популярностью чем PostgreSQL, хотя последняя предоставляет функционал намного богаче.
MySQL до сих пор остаётся лидером среди реляционных open source баз данных, поэтому давайте узнаем как с ней работать через Python.
Установка
В статье речь пойдёт про пакет PyMySQL, это реализация mysql-клиента на чистом Python, поэтому никакие дополнительный Си-библиотеки ставить не придётся. Пакет поддерживает работу с Python 2.7 и Python >= 3.5.
Для установки библиотеки выполняем стандартную команду:
pip install PyMySQL
Начало работы
Соединиться с базой можно вот так:
import pymysql
from pymysql.cursors import DictCursor
connection = pymysql.connect(
host='localhost',
user='user',
password='password',
db='iata',
charset='utf8mb4',
cursorclass=DictCursor
)
…
connection.close()
Обратите внимание, что я импортировал класс DictCursor и передал его в вызов функции connect, это нужно для того, чтобы получить результат в виде словаря, где ключами будут названия колонок. Если вам удобно работать с tuple, то ничего не передавайте в cursorclass
Рекомендуется всегда явно закрывать открытое с базой MySQL соединение, путём вызова метода close у объекта connection. Чаще всего разработчики прибегают к конструкции try/finally, но я использую closing из contextlib. Вот как это выглядит:
from contextlib import closing
import pymysql
from pymysql.cursors import DictCursor
with closing(pymysql.connect(…)) as connection:
…
В этом случае при выходе из контекстного блока автоматически будет вызван метод close. Чтобы начать взаимодействие с MySQL, необходимо создать курсор:
with closing(pymysql.connect(…)) as connection:
with connection.cursor() as cursor:
query = «»»
SELECT
airport_code
FROM
airports
ORDER BY
airport_code DESC
LIMIT 5
«»»
cursor.execute(query)
for row in cursor:
print(row)
{'airport_code': 'ZZW'}
{'airport_code': 'ZZU'}
{'airport_code': 'ZZO'}
{'airport_code': 'ZZG'}
{'airport_code': 'ZYR'}
Пишем в базу
А вот как выглядит INSERT в простенькую таблицу с одной колонкой. Описание схемы таблицы следующее:
CREATE TABLE IF NOT EXISTS tweets (
tweet VARCHAR(254)
) ENGINE=INNODB;
А вот код вставки и чтения результата операции
with closing(pymysql.connect(…)) as conn:
with conn.cursor() as cursor:
tweets = [
'Hello world!',
'I love Python & MySQL',
'Let's start programming ASAP',
'Python is the coolest programming language'
]
query = 'INSERT INTO tweets (tweet) VALUES (%s)'
cursor.executemany(query, tweets)
# необходимо, т.к. по-умолчанию commit происходит только после выхода
# из контекстного менеджера иначе мы бы не увидели твиттов
conn.commit()
with conn.cursor() as cursor:
query = 'SELECT tweet FROM tweets'
cursor.execute(query)
for row in cursor:
print(row['tweet'])
В выполнения кода получим следующий результат
Hello world!
I love Python & MySQL
Let's start programming ASAP
Python is the coolest programming language