Python MySQL — драйвер mysql-connector
MySQL — самая популярная реляционная система управления базами данных. Если вы не знакомы с MySQL, можете прочитать нашучебник по MySQL.
В этой главе рассказывается об использованииmysql-connectorдля подключения к MySQL и работы с ней,mysql-connectorявляетсяMySQLофициально предоставляемым драйвером.
Мы можем использовать командуpipдля установкиmysql-connector:
python -m pip install mysql-connector
Используйте следующий код, чтобы проверить, успешно ли установлен mysql-connector:
demo_mysql_test.py:
Выполните приведённый выше код. Если ошибок не возникло, установка прошла успешно.
ПримечаниеПримечание:Если у вас MySQL версии 8.0, метод аутентификации с помощью плагина пароля изменился. В ранней версии использовался mysql_native_password, а в версии 8.0 используется caching_sha2_password, поэтому необходимо внести некоторые изменения:
Сначала измените конфигурацию my.ini:
[mysqld] default_authentication_plugin=mysql_native_passwordЗатем выполните следующие команды в MySQL, чтобы изменить пароль:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';За дополнительной информацией можно обратиться к:Проблема подключения Python MySQL 8.0。
Создание подключения к базе данных
Вы можете использовать следующий код для подключения к базе данных:
demo_mysql_test.py:
Создание базы данных
Чтобы создать базу данных, используйте оператор "CREATE DATABASE". Следующий код создаёт базу данных с именем example_db:
demo_mysql_test.py:
Прежде чем создавать базу данных, мы также можем использовать оператор "SHOW DATABASES", чтобы проверить, существует ли база данных:
demo_mysql_test.py:
Выведите список всех баз данных:
Как вариант, мы можем подключиться напрямую к базе данных. Если база данных не существует, будет выведено сообщение об ошибке:
demo_mysql_test.py:
Создание таблицы данных
Чтобы создать таблицу данных, используйте оператор"CREATE TABLE". Прежде чем создавать таблицу данных, необходимо убедиться, что база данных уже существует. Следующий код создаёт таблицу данныхsites:
demo_mysql_test.py:

demo_mysql_test.py:
Настройка первичного ключа
При создании таблицы мы обычно задаём первичный ключ (PRIMARY KEY). Мы можем использовать оператор"INT AUTO_INCREMENT PRIMARY KEY", чтобы создать первичный ключ. Первичный ключ начинается с 1 и увеличивается шаг за шагом.
Если наша таблица уже создана, нам нужно использоватьALTER TABLE, чтобы добавить первичный ключ в таблицу:
demo_mysql_test.py:
Добавьте первичный ключ в таблицу sites.
Если вы ещё не создали таблицу sites, вы можете напрямую использовать следующий код для её создания.
demo_mysql_test.py:
Создайте первичный ключ для таблицы.
Вставка данных
Чтобы вставить данные, используйте"INSERT INTO"оператор:
demo_mysql_test.py:
Вставьте запись в таблицу sites.
Выполните код, и результат вывода будет следующим:
1 记录插入成功
Пакетная вставка
Для пакетной вставки используйтеexecutemany()метод. Второй параметр этого метода — список кортежей, содержащий данные, которые мы хотим вставить:
demo_mysql_test.py:
Вставьте несколько записей в таблицу sites.
Выполните код, и результат вывода будет следующим:
4 记录插入成功。
После выполнения вышеуказанного кода можно посмотреть записи в таблице данных:

Если мы хотим получить ID записи после вставки данных, можно использовать следующий код:
demo_mysql_test.py:
Выполните код, и результат вывода будет следующим:
1 条记录已插入, ID: 6
Запрос данных
Чтобы запросить данные, используйтеSELECTинструкцию:
demo_mysql_test.py:
Выполните код, и результат вывода будет следующим:
(1, 'EXAMPLE', 'https://www.example.com') (2, 'Google', 'https://www.google.com') (3, 'Github', 'https://www.github.com') (4, 'Taobao', 'https://www.taobao.com') (5, 'stackoverflow', 'https://www.stackoverflow.com/') (6, 'Zhihu', 'https://www.zhihu.com')
Вы также можете читать данные из указанных полей:
demo_mysql_test.py:
Выполните код, и результат вывода будет следующим:
('EXAMPLE', 'https://www.example.com')
('Google', 'https://www.google.com')
('Github', 'https://www.github.com')
('Taobao', 'https://www.taobao.com')
('stackoverflow', 'https://www.stackoverflow.com/')
('Zhihu', 'https://www.zhihu.com')
Если мы хотим прочитать только одну запись, мы можем использовать методfetchone():
demo_mysql_test.py:
Выполните код, и результат вывода будет следующим:
(1, 'EXAMPLE', 'https://www.example.com')
Условный оператор WHERE
Если мы хотим считывать данные с заданными условиями, мы можем использовать операторwhere:
demo_mysql_test.py
Чтение записей, где поле name равно EXAMPLE:
Выполните код, и результат вывода будет следующим:
(1, 'EXAMPLE', 'https://www.example.com')
Вы также можете использовать подстановочные знаки%:
demo_mysql_test.py
Выполните код, и результат вывода будет следующим:
(1, 'EXAMPLE', 'https://www.example.com') (2, 'Google', 'https://www.google.com')
Чтобы предотвратить атаки SQL-инъекций в запросах к базе данных, мы можем использовать%splaceholder для экранирования условий запроса:
demo_mysql_test.py
Сортировка
Результаты запроса можно отсортировать с помощью оператораORDER BY. По умолчанию применяется сортировка по возрастанию с ключевым словомASC. Если вы хотите задать сортировку по убыванию, можно указать ключевое словоDESC。
demo_mysql_test.py
Сортировка по возрастанию по буквам поля name:
Выполните код, и результат вывода будет следующим:
(3, 'Github', 'https://www.github.com') (2, 'Google', 'https://www.google.com') (1, 'EXAMPLE', 'https://www.example.com') (5, 'stackoverflow', 'https://www.stackoverflow.com/') (4, 'Taobao', 'https://www.taobao.com') (6, 'Zhihu', 'https://www.zhihu.com')
Пример сортировки по убыванию:
demo_mysql_test.py
Сортировка по убыванию по буквам поля name:
Выполните код, и результат вывода будет следующим:
(6, 'Zhihu', 'https://www.zhihu.com') (4, 'Taobao', 'https://www.taobao.com') (5, 'stackoverflow', 'https://www.stackoverflow.com/') (1, 'EXAMPLE', 'https://www.example.com') (2, 'Google', 'https://www.google.com') (3, 'Github', 'https://www.github.com')
Предел
Если мы хотим задать объем данных для запроса, мы можем использовать"LIMIT"оператор, чтобы указать
demo_mysql_test.py
Прочитать первые 3 записи:
Выполните код, и результат вывода будет следующим:
(1, 'EXAMPLE', 'https://www.example.com') (2, 'Google', 'https://www.google.com') (3, 'Github', 'https://www.github.com')
Вы также можете указать начальную позицию. Используемое ключевое слово —OFFSET:
demo_mysql_test.py
Прочитать первые 3 записи, начиная со второй записи:
Выполните код, и результат вывода будет следующим:
(2, 'Google', 'https://www.google.com') (3, 'Github', 'https://www.github.com') (4, 'Taobao', 'https://www.taobao.com')
Удаление записи
Чтобы удалить записи, используйте оператор"DELETE FROM":
demo_mysql_test.py
Удалите записи, где name равно stackoverflow:
Выполните код, и результат вывода будет следующим:
1 条记录删除
Примечание:Используйте оператор DELETE с осторожностью. Убедитесь, что в операторе DELETE указано условие WHERE, иначе все данные в таблице будут удалены.
Чтобы предотвратить атаки SQL-инъекций в запросах к базе данных, можно использовать%sзаполнитель для экранирования условий оператора DELETE:
demo_mysql_test.py
Выполните код, и результат вывода будет следующим:
1 条记录删除
Обновление данных таблицы
Чтобы обновить таблицу данных, используйте"UPDATE"оператор:
demo_mysql_test.py
Измените данные поля с именем Zhihu на ZH:
Выполните код, и результат вывода будет следующим:
1 条记录被修改
Примечание:Убедитесь, что оператор UPDATE указывает условие WHERE, иначе все данные в таблице будут обновлены.
Чтобы предотвратить атаки SQL-инъекций в запросах к базе данных, мы можем использовать заполнитель %s для экранирования условий оператора UPDATE:
demo_mysql_test.py
Выполните код, и результат вывода будет следующим:
1 条记录被修改
Удаление таблицы
Чтобы удалить таблицу, используйте"DROP TABLE"оператор.IF EXISTSЭто ключевое слово используется для проверки, существует ли таблица, и она удаляется, только если существует: