MySQL Connector/Python 发行说明
语法
cursor.execute(operation, params=None, multi=False)
iterator = cursor.execute(operation, params=None, multi=True)
此方法执行给定的数据库 操作
(查询或命令)。在元组或字典 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() 方法获得操作生成的警告。