MySQL Connector/Python 版本注意事項
語法
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() 方法取得操作產生的警告。