句法:
cursor.execute(operation, params=None, multi=False)
iterator = cursor.execute(operation, params=None, multi=True)
此方法执行给定的数据库
operation
(查询或命令)。在元组或字典params
中找到的参数绑定到操作中的变量。指定变量使用
%s
或
参数样式(即使用或
样式)。如果是
,则
返回一个迭代器。
%(
name
)sformat
pyformat
execute()
multi
True
在 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() 方法获得。