Spec-Zone .ru
спецификации, руководства, описания, API
|
Вставка или обновление данных также делаются, используя структуру обработчика, известную как курсор. Когда Вы
используете транзакционный механизм хранения такой как InnoDB
(значение по
умолчанию в MySQL 5.5 и позже), следует фиксировать
данные после последовательности INSERT
, DELETE
, и UPDATE
операторы.
Этот пример показывает, как вставить новые данные. Второе INSERT
зависит от значения недавно создаваемого первичного
ключа первого. Пример также демонстрирует, как использовать расширенные форматы. Задача состоит в том, чтобы
добавить нового сотрудника, начинающего работать завтра с набором зарплаты к 50000.
Следующий пример использует таблицы, составленные в Разделе
в качестве примера 22.6.4.2, "Создавая
Таблицы Используя Соединитель/Python". AUTO_INCREMENT
опция
столбца для первичного ключа employees
таблица важна, чтобы гарантировать
надежные, легко доступные для поиска данные.
from __future__ import print_functionfrom datetime import date, datetime, timedeltaimport mysql.connectorcnx = 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 employeecursor.execute(add_employee, data_employee)emp_no = cursor.lastrowid# Insert salary informationdata_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 databasecnx.commit()cursor.close()cnx.close()
Мы сначала открываем соединение с сервером MySQL и храним объект
соединения в переменной cnx
. Мы тогда создаем новый курсор, по умолчанию объект
MySQLCursor, используя соединение cursor()
метод.
Мы могли вычислить завтра, вызывая функцию базы данных, но для ясности мы делаем это в Python, используя datetime
модуль.
Оба INSERT
операторы сохранены в вызванных переменных add_employee
и add_salary
. Отметьте что второе INSERT
оператор
использует расширенные коды формата Python.
Информация нового сотрудника хранится в кортеже data_employee
. Запрос, чтобы ввести
нового сотрудника выполняется, и мы получаем недавно вставленное значение для emp_no
столбец ( AUTO_INCREMENT
столбец)
использование lastrowid
свойство объекта курсора.
Затем, мы вставляем новую зарплату для нового сотрудника, используя emp_no
переменная в словаре, содержащем данные. Этот словарь передают к execute()
метод
курсора возражает, произошла ли ошибка.
С тех пор Соединителем/Python значения по умолчанию выключает автоматическую фиксацию,
и MySQL 5.5 и более позднее транзакционное использование InnoDB
таблицы по
умолчанию, необходимо фиксировать Ваши изменения, используя соединение commit()
метод. Вы могли также откатывать
использование rollback()
метод.