文件首頁
MySQL Connector/Python 開發人員指南
相關文件 下載本手冊
PDF (美式信紙) - 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)

此方法執行給定的資料庫 operation (查詢或指令)。在元組或字典 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() 方法取得操作產生的警告。