文档首页
MySQL Connector/Python 开发人员指南
相关文档 下载本手册
PDF (US Ltr) - 0.7Mb
PDF (A4) - 0.7Mb


10.5.7 MySQLCursor.execute() 方法

语法

cursor.execute(operation, params=None, multi=False)
iterator = cursor.execute(operation, params=None, multi=True)

此方法执行给定的数据库 操作(查询或命令)。在元组或字典 params 中找到的参数绑定到操作中的变量。使用 %s%(name)s 参数样式(即使用 formatpyformat 样式)指定变量。execute()multiTrue 时返回一个迭代器。

注意

在 Python 中,包含单个值的元组必须包含逗号。例如,('abc') 被评估为标量,而 ('abc',) 被评估为元组。

此示例插入有关新员工的信息,然后选择该人员的数据。这些语句作为单独的 execute() 操作执行

insert_stmt = (
  "INSERT INTO employees (emp_no, first_name, last_name, hire_date) "
  "VALUES (%s, %s, %s, %s)"
)
data = (2, 'Jane', 'Doe', datetime.date(2012, 3, 23))
cursor.execute(insert_stmt, data)

select_stmt = "SELECT * FROM employees WHERE emp_no = %(emp_no)s"
cursor.execute(select_stmt, { 'emp_no': 2 })

数据值根据需要从 Python 对象转换为 MySQL 可以理解的内容。在前面的示例中,datetime.date() 实例被转换为 '2012-03-23'

如果 multi 设置为 True,则 execute() 能够执行在 operation 字符串中指定的多个语句。它返回一个迭代器,允许处理每个语句的结果。但是,在这种情况下使用参数不能很好地工作,通常最好单独执行每个语句。

以下示例在单个 execute() 操作中选择和插入数据,并显示每个语句的结果

operation = 'SELECT 1; INSERT INTO t1 VALUES (); SELECT 2'
for result in cursor.execute(operation, multi=True):
  if result.with_rows:
    print("Rows produced by statement '{}':".format(
      result.statement))
    print(result.fetchall())
  else:
    print("Number of rows affected by statement '{}': {}".format(
      result.statement, result.rowcount))

如果连接配置为获取警告,则可以通过 MySQLCursor.fetchwarnings() 方法获得操作生成的警告。