6.5.3 使用连接器/Python 插入数据

插入或更新数据也是使用称为游标的处理程序结构完成的。当您使用诸如InnoDB(MySQL 5.5 及更高版本中的默认设置)之类的事务性存储引擎时,您必须 在一系列 、 和 语句 之后提交数据。INSERTDELETEUPDATE

此示例说明如何插入新数据。第二个 INSERT取决于第一个新创建的主键 的值。该示例还演示了如何使用扩展格式。任务是添加一个明天开始上班的新员工,工资设置为50000。

笔记

以下示例使用在示例 第 6.5.2 节“使用连接器/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()

我们可以通过调用数据库函数来计算明天,但为了清楚起见,我们使用 datetime模块在 Python 中进行计算。

这两个INSERT语句都存储在名为add_employeeand 的变量中add_salary。请注意,第二 INSERT条语句使用了扩展的 Python 格式代码。

新员工的信息存储在元组中 data_employee。执行插入新员工的查询,我们使用游标对象的属性 检索emp_no列(一 AUTO_INCREMENT列) 的新插入值。lastrowid

接下来,我们使用 emp_no保存数据的字典中的变量为新员工插入新薪水。execute()如果发生错误, 该字典将传递给游标对象的 方法。

由于默认情况下 Connector/Python 关闭 自动提交,而 MySQL 5.5 及更高版本InnoDB默认使用事务表,因此有必要使用连接的commit()方法提交您的更改。您也可以 使用该 方法 回滚。rollback()