Python中使用MySQL模糊查詢的方法

TechSynapse發表於2024-06-27

1.方法一:使用pymysql庫的方法

當在Python中使用MySQL進行模糊查詢時,我們通常會使用pymysqlmysql-connector-python這樣的庫來連線MySQL資料庫並執行查詢。以下是一個使用pymysql進行模糊查詢的詳細示例,包括安裝庫、連線資料庫、執行查詢以及處理結果。

1.1 安裝pymysql庫

首先,確保我們已經安裝了pymysql庫。如果沒有,可以透過pip來安裝:

bash複製程式碼

pip install pymysql

1.2 編寫Python程式碼進行模糊查詢

import pymysql  
  
# 資料庫連線配置  
config = {  
    'host': 'localhost',  
    'user': 'your_username',  
    'password': 'your_password',  
    'database': 'your_database',  
    'charset': 'utf8mb4',  
    'cursorclass': pymysql.cursors.DictCursor  
}  
  
# 連線資料庫  
connection = pymysql.connect(**config)  
  
try:  
    with connection.cursor() as cursor:  
        # 編寫SQL查詢語句,使用LIKE進行模糊查詢  
        # 假設我們有一個名為"articles"的表,其中有一個"content"欄位,我們想要查詢包含"Python"關鍵字的文章  
        sql = "SELECT * FROM articles WHERE content LIKE %s"  
        # LIKE查詢中,%是萬用字元,代表任意數量的字元(包括零個字元)  
        # 我們需要為%s提供一個包含%的字串來構建LIKE查詢  
        search_term = '%Python%'  
        cursor.execute(sql, (search_term,))  
  
        # 獲取所有查詢結果  
        results = cursor.fetchall()  
  
        # 處理查詢結果  
        for row in results:  
            # row是一個字典,其中包含了查詢結果的每一列及其對應的值  
            print(f"ID: {row['id']}, Title: {row['title']}, Content: {row['content'][:50]}...")  # 只列印內容的前50個字元作為示例  
  
finally:  
    # 關閉資料庫連線  
    connection.close()

1.3 注意事項

(1)請將your_usernameyour_passwordyour_database替換為我們的MySQL資料庫的實際使用者名稱、密碼和資料庫名。

(2)在上面的示例中,我們使用了%作為萬用字元來構建LIKE查詢。%Python%將匹配任何包含"Python"的字串,不論其前後是否有其他字元。如果我們只想匹配以"Python"開頭的字串,可以使用Python%;只想匹配以"Python"結尾的字串,可以使用%Python

(3)在執行查詢時,我們使用了一個元組(search_term,)來傳遞引數給cursor.execute()方法。注意這個元組只有一個元素,但也需要逗號來標識它是一個元組,而不是一個括號內的普通表示式。

(4)fetchall()方法用於獲取查詢結果的所有行。如果我們只需要獲取部分結果,可以使用fetchone()fetchmany(size)方法。

(5)在處理完資料庫操作後,確保關閉資料庫連線以釋放資源。在這個示例中,我們使用了一個try...finally塊來確保即使在發生異常時也能關閉連線。

2.方法二:使用mysql-connector-python庫的方法

除了使用pymysql庫進行MySQL的模糊查詢之外,還可以使用mysql-connector-python庫,這是MySQL官方提供的Python聯結器。以下是使用mysql-connector-python進行模糊查詢的示例程式碼:

2.1 安裝mysql-connector-python庫

如果還沒有安裝mysql-connector-python,可以透過pip來安裝:

bash複製程式碼

pip install mysql-connector-python

2.2 編寫Python程式碼進行模糊查詢

import mysql.connector  
  
# 資料庫連線配置  
config = {  
    'host': 'localhost',  
    'user': 'your_username',  
    'password': 'your_password',  
    'database': 'your_database'  
}  
  
# 連線資料庫  
cnx = mysql.connector.connect(**config)  
  
try:  
    cursor = cnx.cursor(dictionary=True)  # 使用字典遊標以便獲取結果作為字典  
  
    # 編寫SQL查詢語句,使用LIKE進行模糊查詢  
    # 假設我們有一個名為"articles"的表,其中有一個"content"欄位,我們想要查詢包含"Python"關鍵字的文章  
    query = ("SELECT * FROM articles WHERE content LIKE %s")  
    search_term = '%Python%'  # LIKE查詢中,%是萬用字元  
  
    # 注意:mysql-connector-python中的引數化查詢需要確保%是查詢字串的一部分  
    # 因此我們直接構造完整的LIKE表示式字串  
    cursor.execute(query, (search_term,))  
  
    # 獲取所有查詢結果  
    results = cursor.fetchall()  
  
    # 處理查詢結果  
    for row in results:  
        print(f"ID: {row['id']}, Title: {row['title']}, Content: {row['content'][:50]}...")  # 只列印內容的前50個字元作為示例  
  
finally:  
    # 關閉遊標和連線  
    if cursor:  
        cursor.close()  
    if cnx.is_connected():  
        cnx.close()

2.3 注意事項

(1)同樣需要將your_usernameyour_passwordyour_database替換為我們的MySQL資料庫的實際使用者名稱、密碼和資料庫名。

(2)在mysql.connector.connect()中,我們沒有直接指定字符集和遊標型別,因為mysql-connector-python的預設配置通常已經足夠好。但是,如果需要,我們可以新增這些配置選項。

(3)使用cursor.close()cnx.close()來確保遊標和連線都被正確關閉。

(4)mysql-connector-python也支援使用上下文管理器(即with語句)來自動管理遊標和連線的關閉,但這需要建立一個新的遊標類或使用特定的上下文管理器。在上面的示例中,我們手動關閉了它們以展示基本的資源管理。

(5)在處理資料庫查詢時,務必注意SQL隱碼攻擊的風險。透過使用引數化查詢(如上例所示),我們可以確保使用者輸入被正確地轉義,從而防止SQL隱碼攻擊。

相關文章