cursor.execute(sql)的使用方法與相關知識

一、概述

在Python的資料庫編程中,我們經常會用到的是cursor.execute(sql)這個函數,它用來執行SQL語句,並且返回受影響的行數。它是Python DB-API規範所要求實現的一個方法。在這篇文章中,我們將圍繞這個方法,從以下幾個方面進行講解:

二、參數

cursor.execute()函數的參數是SQL語句。這個語句可以是一個字元串變數或是直接寫到函數里的,具體可以看下面的示例:

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="yourusername",
  password="yourpassword",
  database="mydatabase"
)

mycursor = mydb.cursor()

sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
val = ("John", "Highway 21")
mycursor.execute(sql, val)

mydb.commit()

print(mycursor.rowcount, "record inserted.")

在這個例子中,我們使用了mysql.connector這個庫來連接MySQL資料庫,同時用cursor()方法定義了游標對象mycursor。使用了一條SQL語句INSERT INTO來新增一條數據到資料庫表格customers中。

在游標對象mycursor上,我們調用了execute()方法並且傳入了sql和val兩個參數。其中sql是一個SQL語句字元串,val是一個元組。這裡使用了?作為佔位符,那麼就要按照?的順序傳入後面的數據。

三、執行結果

在執行完cursor.execute()方法後,我們可以調用一些其他的方法來獲取執行結果。

1、調用rowcount屬性可以獲取受影響的行數,例如:

mycursor.execute("SELECT * FROM customers")
myresult = mycursor.fetchall()
print("Number of rows in customers is: ", mycursor.rowcount)

2、調用fetchone()、fetchmany()或者fetchall()方法,分別返回一條、多條或所有數據。

例如,下面的代碼會返回所有customers表的數據:

mycursor.execute("SELECT * FROM customers")
myresult = mycursor.fetchall()
for x in myresult:
  print(x)

四、防止SQL注入

SQL注入攻擊是資料庫編程中的一個比較棘手的問題。如果我們在構造SQL語句的時候,不小心將來自用戶輸入的數據拼接進去,那麼就存在被攻擊的風險。為了防止這種情況的發生,我們需要使用參數化查詢而不是直接拼接字元串。而參數化查詢就是在SQL語句中使用佔位符,然後將參數傳入到函數中來進行替換。比如:

sql = "SELECT * FROM customers WHERE address = %s"
adr = ("Yellow Garden 2", )
mycursor.execute(sql, adr)

在這個例子中,我們在SQL語句中使用了一個佔位符%s。在調用execute()方法時,我們將指定的元組傳入到方法中,作為替換佔位符的參數。這樣,即使從用戶輸入的數據中截取了字元串,也不會造成SQL注入的問題。

五、批量操作

在Python中,我們也可以使用executemany()方法對多條SQL語句進行批處理。方法的使用方式與execute()類似,只不過需要傳入的數據不同而已。比如:

sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
val = [
  ('Peter', 'Lowstreet 4'),
  ('Amy', 'Apple st 652'),
  ('Hannah', 'Mountain 21'),
  ('Michael', 'Valley 345'),
  ('Sandy', 'Ocean blvd 2'),
  ('Betty', 'Green Grass 1'),
  ('Richard', 'Sky st 331'),
  ('Susan', 'One way 98'),
  ('Vicky', 'Yellow Garden 2'),
  ('Ben', 'Park Lane 38'),
  ('William', 'Central st 954'),
  ('Chuck', 'Main Road 989'),
  ('Viola', 'Sideway 1633')
]

mycursor.executemany(sql, val)
mydb.commit()
print(mycursor.rowcount, "was inserted.")

在這個例子中,我們使用了一個包含多個元組的列表val。在調用executemany()方法時,我們將sql和這個元組列表作為參數傳入。這樣就可以批量地插入多個數據。

原創文章,作者:ABXC,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/146072.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
ABXC的頭像ABXC
上一篇 2024-10-29 18:57
下一篇 2024-10-29 18:57

相關推薦

  • Python中init方法的作用及使用方法

    Python中的init方法是一個類的構造函數,在創建對象時被調用。在本篇文章中,我們將從多個方面詳細討論init方法的作用,使用方法以及注意點。 一、定義init方法 在Pyth…

    編程 2025-04-29
  • Python符號定義和使用方法

    本文將從多個方面介紹Python符號的定義和使用方法,涉及注釋、變數、運算符、條件語句和循環等多個方面。 一、注釋 1、單行注釋 # 這是一條單行注釋 2、多行注釋 “”” 這是一…

    編程 2025-04-29
  • Python下載到桌面圖標使用方法用法介紹

    Python是一種高級編程語言,非常適合初學者,同時也深受老手喜愛。在Python中,如果我們想要將某個程序下載到桌面上,需要注意一些細節。本文將從多個方面對Python下載到桌面…

    編程 2025-04-29
  • Python匿名變數的使用方法

    Python中的匿名變數是指使用「_」來代替變數名的特殊變數。這篇文章將從多個方面介紹匿名變數的使用方法。 一、作為佔位符 匿名變數通常用作佔位符,用於代替一個不需要使用的變數。例…

    編程 2025-04-29
  • 百度地區熱力圖的介紹和使用方法

    本文將詳細介紹百度地區熱力圖的使用方法和相關知識。 一、什麼是百度地區熱力圖 百度地區熱力圖是一種用於展示區域內某種數據分布情況的地圖呈現方式。它通過一張地圖上不同區域的顏色深淺,…

    編程 2025-04-29
  • Matlab中addpath的使用方法

    addpath函數是Matlab中的一個非常常用的函數,它可以在Matlab環境中增加一個或者多個文件夾的路徑,使得Matlab可以在需要時自動搜索到這些文件夾中的函數。因此,學會…

    編程 2025-04-29
  • Python函數重載的使用方法和注意事項

    Python是一種動態語言,它的函數重載特性有些不同於靜態語言,本文將會從使用方法、注意事項等多個方面詳細闡述Python函數重載,幫助讀者更好地應用Python函數重載。 一、基…

    編程 2025-04-28
  • Python同步賦值語句的使用方法和注意事項

    Python同步賦值語句是Python中用來同時為多個變數賦值的一種方法。通過這種方式,可以很方便地同時為多個變數賦值,從而提高代碼的可讀性和編寫效率。下面從多個方面詳細介紹Pyt…

    編程 2025-04-28
  • Python後綴名及其使用方法解析

    Python是一種通用性編程語言,其源文件使用.py作為文件後綴名。在本篇文章中,將會從多個方面深入解析Python的後綴名以及如何為Python源文件添加其他的後綴名。 一、.p…

    編程 2025-04-28
  • 微信mac版歷史版完整代碼示例與使用方法

    微信是一款廣受歡迎的即時通訊軟體,為了方便用戶在Mac電腦上也能使用微信,微信團隊推出了Mac版微信。本文將主要講解微信mac版歷史版的完整代碼示例以及使用方法。 一、下載微信ma…

    編程 2025-04-28

發表回復

登錄後才能評論