Spec-Zone .ru
спецификации, руководства, описания, API

22.6.4.3. Вставка Данных Используя Соединитель/Python

Вставка или обновление данных также делаются, используя структуру обработчика, известную как курсор. Когда Вы используете транзакционный механизм хранения такой как 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() метод.