5.3 Вставка данных с помощью Connector/Python
Вставка или обновление данных также выполняется с помощью структуры обработчика, известной как курсор. При использовании транзакционной системы хранения данных, такой как InnoDB (по умолчанию в MySQL 5.5 и выше), вы должны подтвердить данные после последовательности , , и операций.
Этот пример демонстрирует вставку новых данных. Второй запрос зависит от значения, созданного первым. Пример также демонстрирует использование расширенных форматов. Задача – добавить нового сотрудника, который начинает работу завтра с заработной платой 50000.
В следующем примере используются таблицы, созданные в примере разделе 5.2 «Создание таблиц с помощью Connector/Python». Опция AUTO_INCREMENT для столбца первичного ключа таблицы employees важна для обеспечения надежных и легко ищущихся данных.
from __future__ import print_function
from datetime import date, datetime, timedelta
import mysql.connector
cnx = mysql.connector.connect(user='scott', database='employees')
cursor = cnx.cursor()
tomorrow = datetime.now().date() + timedelta(days=1)
add_employee = ("INSERT INTO employees "
"(first_name, last_name, hire_date, gender, birth_date) "
"VALUES (%s, %s, %s, %s, %s)")
add_salary = ("INSERT INTO salaries "
"(emp_no, salary, from_date, to_date) "
"VALUES (%(emp_no)s, %(salary)s, %(from_date)s, %(to_date)s)")
data_employee = ('Geert', 'Vanderkelen', tomorrow, 'M', date(1977, 6, 14))
# Insert new employee
cursor.execute(add_employee, data_employee)
emp_no = cursor.lastrowid
# Insert salary information
data_salary = {
'emp_no': emp_no,
'salary': 50000,
'from_date': tomorrow,
'to_date': date(9999, 1, 1),
}
cursor.execute(add_salary, data_salary)
# Make sure data is committed to the database
cnx.commit()
cursor.close()
cnx.close()
Сначала мы открываем подключение к серверу MySQL и сохраняем объект подключения в переменной cnx. Затем мы создаем новый курсор, по умолчанию объект MySQLCursor, используя метод подключения cursor().
Мы могли бы рассчитать завтрашнюю дату, вызвав функцию базы данных, но для ясности мы сделаем это в Python, используя модуль datetime.
Оба запроса хранятся в переменных add_employee и add_salary. Обратите внимание, что второй запрос использует расширенные коды форматирования Python.
Информация о новом сотруднике хранится в кортеже data_employee. Запрос на вставку нового сотрудника выполняется, и мы получаем вставленное значение для столбца emp_no (столбец AUTO_INCREMENT) с помощью свойства lastrowid объекта курсора.
Далее, мы вставляем новую заработную плату для нового сотрудника, используя переменную emp_no в словаре, содержащем данные. Этот словарь передается методу execute() объекта курсора, если произошла ошибка.
Поскольку по умолчанию Connector/Python отключает и MySQL 5.5 и выше по умолчанию использует транзакционные InnoDB таблицы, необходимо подтвердить изменения с помощью метода подключения commit(). Вы также можете использовать метод rollback().
© 2025 Oracle
Licensed under the GPLv2 License.