Python使用pymysql操作數據庫

????????大家好,當涉及到與數據庫進行交互和操作時,Python的pymysql庫是一個常用且功能強大的選擇。pymysql提供了與MySQL數據庫的連接、查詢、插入、更新和刪除等操作的方法,使得在Python中進行數據庫操作變得簡單而高效。

1、安裝?pymysql?庫

在開始之前,確保已經安裝了?pymysql?庫。可以使用以下命令通過 pip 進行安裝:

pip install pymysql

2、連接數據庫

????????首先,我們需要建立與數據庫的連接。使用?pymysql?的?connect()?函數來創建一個數據庫連接對象,該函數接受數據庫的連接參數,例如主機名、用戶名、密碼、數據庫名等。以下是一個建立與 MySQL 數據庫的連接的示例:

import pymysql# 建立數據庫連接
connection = pymysql.connect(host='localhost',user='username',password='password',database='database_name'
)

????????在上述示例中,我們通過傳遞數據庫的連接參數來建立與數據庫的連接。根據實際情況,您需要將?hostuserpassword?和?database?替換為相應的值。

3、創建游標對象

????????在建立數據庫連接后,我們需要創建一個游標對象來執行 SQL 語句和操作數據庫。游標對象允許我們執行查詢、插入、更新或刪除等數據庫操作。

# 創建游標對象
cursor = connection.cursor()

4、執行 SQL 查詢

????????使用游標對象,我們可以執行 SQL 查詢并獲取結果。pymysql?提供了多個方法來執行查詢,其中最常用的是?execute()?和?fetchone()fetchall()?方法。

  • execute()?方法用于執行 SQL 查詢,可以接受帶有占位符的參數。
  • fetchone()?方法用于獲取查詢結果的下一行數據。
  • fetchall()?方法用于獲取查詢結果的所有行數據。

以下是一個執行查詢并獲取結果的示例:

# 執行查詢
cursor.execute('SELECT * FROM table_name')# 獲取查詢結果的所有行數據
rows = cursor.fetchall()# 遍歷結果
for row in rows:print(row)

????????在上述示例中,我們執行了一個簡單的查詢語句,并使用?fetchall()?方法獲取查詢結果的所有行數據。然后,我們遍歷每一行數據并將其打印出來。

5、執行 SQL 插入、更新和刪除操作

????????除了執行查詢,pymysql?也支持執行插入、更新和刪除等操作。使用?execute()?方法執行這些操作,可以將相應的 SQL 語句作為參數傳遞給它。

(1)插入操作

# 執行插入操作
cursor.execute("INSERT INTO table_name (column1, column2) VALUES (%s, %s)", ('value1', 'value2'))# 提交事務
connection.commit()

(2)更新操作

# 執行更新操作
cursor.execute("UPDATE table_name SET column1 = %s WHERE column2 = %s", ('new_value', 'condition'))# 提交事務
connection.commit()

(3)刪除操作

# 執行刪除操作
cursor.execute("DELETE FROM table_name WHERE column1 = %s", ('condition',))# 提交事務
connection.commit()

????????在上述示例中,我們使用?execute()?方法執行了插入、更新和刪除操作,并使用參數占位符?%s?來傳遞值。最后,我們通過?connection.commit()?提交事務。

6、關閉連接

在完成數據庫操作后,不要忘記關閉數據庫連接,以釋放資源。

# 關閉游標對象
cursor.close()# 關閉數據庫連接
connection.close()

在上述示例中,我們使用?close()?方法關閉了游標對象和數據庫連接。

7、完整實例

????????以下是一個完整的例子,展示了如何連接到MySQL數據庫、創建表、插入數據、執行查詢并獲取結果:

import pymysql# 建立數據庫連接
connection = pymysql.connect(host='localhost',user='username',password='password',database='database_name'
)try:# 創建游標對象cursor = connection.cursor()# 創建表create_table_query = '''CREATE TABLE IF NOT EXISTS employees (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100),age INT,department VARCHAR(100))'''cursor.execute(create_table_query)# 插入數據insert_query = "INSERT INTO employees (name, age, department) VALUES (%s, %s, %s)"employees_data = [('John Doe', 30, 'IT'),('Jane Smith', 35, 'HR'),('Mark Johnson', 28, 'Sales')]cursor.executemany(insert_query, employees_data)# 提交事務connection.commit()# 執行查詢select_query = "SELECT * FROM employees"cursor.execute(select_query)# 獲取查詢結果的所有行數據rows = cursor.fetchall()# 打印查詢結果for row in rows:print(row)finally:# 關閉游標對象和數據庫連接cursor.close()connection.close()

在上述示例中,我們首先建立了與MySQL數據庫的連接,然后使用游標對象執行以下操作:

  1. 創建表:我們使用CREATE TABLE語句創建了一個名為employees的表,具有id、name、age和department等列。

  2. 插入數據:我們使用executemany()方法批量插入了幾條員工數據。

  3. 提交事務:使用connection.commit()提交所有的插入操作,將數據持久化到數據庫。

  4. 執行查詢:我們執行了一個簡單的SELECT查詢語句,并使用fetchall()方法獲取查詢結果的所有行數據。

  5. 打印查詢結果:我們遍歷查詢結果,并將每一行數據打印出來。

  6. 最后,關閉了游標對象和數據庫連接,釋放了資源。

8、連接池

????????使用pymysqlConnectionPool()函數創建一個數據庫連接池對象。該函數接受連接參數,例如主機名、用戶名、密碼、數據庫名等,以及一些連接池相關的參數,例如最大連接數、最小空閑連接數等。

以下是創建連接池的示例:

# 創建連接池
connection_pool = pymysql.cursors.ConnectionPool(host='localhost',user='username',password='password',database='database_name',autocommit=True,charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor,maxconnections=10,mincached=5
)

????????在上述示例中,我們使用了一些常用的連接池參數,如maxconnections表示最大連接數,mincached表示最小空閑連接數。可以根據實際需求調整這些參數。

????????使用連接池對象的connection()方法從連接池中獲取一個數據庫連接。這樣,每次需要連接時,可以直接從連接池中獲取,而不需要手動創建連接。

# 從連接池獲取連接
connection = connection_pool.get_connection()

現在,可以使用connection對象執行數據庫操作。例如執行查詢、插入、更新和刪除等。

# 創建游標對象
cursor = connection.cursor()# 執行查詢
cursor.execute("SELECT * FROM table_name")# 獲取查詢結果的所有行數據
rows = cursor.fetchall()# 打印查詢結果
for row in rows:print(row)# 關閉游標對象
cursor.close()# 將連接返回給連接池
connection_pool.release(connection)

在上述示例中,使用連接對象的cursor()方法創建游標對象,并執行了一個查詢操作。最后,我們關閉了游標對象,并使用連接池的release()方法將連接返回給連接池。

在程序結束時,確保關閉連接池,以釋放資源。

# 關閉連接池
connection_pool.close()

以下是一個完整的pymysql連接池的示例:

import pymysql.cursors# 創建連接池
connection_pool = pymysql.cursors.ConnectionPool(host='localhost',user='username',password='password',database='database_name',autocommit=True,charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor,maxconnections=10,mincached=5
)try:# 從連接池獲取連接connection = connection_pool.get_connection()# 創建游標對象cursor = connection.cursor()# 執行查詢cursor.execute("SELECT * FROM table_name")# 獲取查詢結果的所有行數據rows = cursor.fetchall()# 打印查詢結果for row in rows:print(row)# 關閉游標對象cursor.close()# 將連接返回給連接池connection_pool.release(connection)finally:# 關閉連接池connection_pool.close()

在上述示例中,首先創建了一個pymysql連接池對象,設置了連接池的參數,如最大連接數和最小空閑連接數。

然后,在try-finally塊中執行以下操作:

  • 從連接池獲取連接:

    使用連接池對象的get_connection()方法從連接池中獲取一個數據庫連接。

  • 執行查詢:

    使用獲取的連接對象創建游標對象,并執行查詢操作。

  • 獲取查詢結果:

    使用游標對象的fetchall()方法獲取查詢結果的所有行數據。

  • 打印查詢結果:

    遍歷查詢結果,并將每一行數據打印出來。

  • 關閉游標對象:

    使用游標對象的close()方法關閉游標對象。

  • 將連接返回給連接池:

    使用連接池對象的release()方法將連接返回給連接池,以便重復使用。

最后,在finally塊中,關閉了連接池,確保在程序結束時釋放資源。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/14820.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/14820.shtml
英文地址,請注明出處:http://en.pswp.cn/web/14820.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

面部捕捉 學習筆記

目錄 FaceShift Studio FaceRig Pro是一款功能強大的面部捕捉視頻制作軟件版 FaceShift Studio FaceShift人臉表情識別原理分析 - 知乎 FaceRig Pro是一款功能強大的面部捕捉視頻制作軟件版

Python3 筆記:部分專有名詞解釋

1、python 英 /?pa?θ?n/ 這個詞在英文中的意思是蟒蛇。但據說Python的創始人Guido van Rossum(吉多范羅蘇姆)選擇Python這個名字的原因與蟒蛇毫無關系,只是因為他是“蒙提派森飛行馬戲團(Monty Python's Flying Ci…

【靜態分析】在springboot使用太阿(Tai-e)01

參考:使用太阿(Tai-e)進行靜態代碼安全分析(spring-boot篇一) - 先知社區 ---------------------------------------------------------------------- 由于spring-boot實現了控制反轉與面向切面編程的設計思想&#x…

OpenHarmony輕松玩轉GIF數據渲染

OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)提供了Image組件支持GIF動圖的播放,但是缺乏擴展能力,不支持播放控制等。今天介紹一款三方庫——ohos-gif-drawable三方組件,帶大家一起玩轉GIF的數據渲染,搞…

如何在JS中克隆對象

在JavaScript中,克隆對象并不是直接支持的操作,因為JavaScript中的對象是通過引用傳遞的,而不是通過值傳遞。但是,你可以使用幾種不同的方法來"克隆"或"復制"一個對象。 1. 淺拷貝(Shallow Copy&…

二手車經營效率羅盤,用經營效率羅盤玩轉二手車生意

課程下載:https://download.csdn.net/download/m0_66047725/89292198 更多資源下載:關注我。 帶你了解不一樣的二手車圈讓二手車經營更高效 課程介紹 隨著時代不斷發展,二手車行業迎來了快速變革期。二手車有著一車一況、一車一價非標和價…

無人機+飛行服務:無人機飛防服務(打藥+施肥+播種)技術詳解

無人機飛防服務,結合了先進的無人機技術與農業實踐,為現代農業提供了高效、精準的打藥、施肥和播種解決方案。以下是對這些技術的詳細解析: 一、無人機打藥技術 無人機打藥技術利用無人機搭載噴霧設備,對農田進行精準施藥。通過…

【數倉系列】maxcompute、postgresql、sparksql等行轉列數據處理實戰總結(其他類型持續總結更新)

1.熟悉、梳理、總結項目研發實戰中的SQL開發日常使用中的問題、經驗總結,都是常用的開發技能,可以省去很多時間,時間長就忘記了 2.歡迎點贊、關注、批評、指正,互三走起來,小手動起來! 文章目錄 1.maxcompu…

關于java.nio.file 包--用于文件和文件系統操作的核心包之一

java.nio.file 包是 Java 中用于文件和文件系統操作的核心包之一。這個包提供了許多類和接口,用于在 Java 虛擬機中訪問文件、管理文件屬性和操作文件系統。主要的功能包括: 1.訪問文件和目錄: java.nio.file.Files 類提供了許多靜態方法,用于…

【Crypto】看我回旋踢

文章目錄 一、看我回旋踢二、知識點什么是ROT13?工作原理分析字符串格式 解題感悟 一、看我回旋踢 關鍵詞回旋,盲猜ROT13 因為以 synt{ 開頭,并以 } 結束,基本可以判斷是ROT13 小小flag,拿下! 二、知識點 …

抖音極速版:抖音輕量精簡版本,新人享大福利

和快手一樣,抖音也有自己的極速版,可視作抖音的輕量精簡版,更專注于刷視頻看廣告賺錢,收益比抖音要高,可玩性更佳。 抖音極速版簡介 抖音極速版是一個提供短視頻創業和收益任務的平臺,用戶可以通過觀看廣…

leetcode-560 和為k的數組

一、題目描述 給你一個整數數組 nums 和一個整數 k ,請你統計并返回 該數組中和為 k 的子數組的個數 。 子數組是數組中元素的連續非空序列。 注意:nums中的元素可為負數 輸入:nums [1,1,1], k 2 輸出:2輸入:num…

裝飾乙級資質延期申請的注意事項

在申請裝飾乙級資質延期時,企業需要注意以下幾個重要事項: 提前了解政策和要求: 企業應提前了解并熟悉資質延期的相關政策和要求,包括所需材料、辦理流程、時間限制等。這有助于企業做好充分準備,避免在申請過程中出現…

【機器學習聚類算法實戰-5】機器學習聚類算法之DBSCAN聚類、K均值聚類算法、分層聚類和不同度量的聚集聚類實例分析

🎩 歡迎來到技術探索的奇幻世界👨?💻 📜 個人主頁:一倫明悅-CSDN博客 ?🏻 作者簡介: C軟件開發、Python機器學習愛好者 🗣? 互動與支持:💬評論 &…

MYSQL課堂練習

學生表:studentsno,sname,ssex,sage,sdept)學號,姓名,性別,年齡,所在系 sno為主鍵課程表:Course(cno,cname,) 課程號,課程名 cno為主鍵 學生選課…

申報照明工程設計乙級資質關于財務審計報告的要求

申報照明工程設計乙級資質時,關于財務審計報告的要求通常包括以下幾點: 審計報告類型:需要提供由具有法定資質的會計師事務所出具的財務審計報告。如果是企業已經運營滿一個會計年度,應提交最近一個完整會計年度的年度審計報告。如…

Rust:struct 與字節序列的相互轉換

在 Rust 中&#xff0c;將結構體&#xff08;struct&#xff09;與字節序列&#xff08;Vec<u8>&#xff09;相互轉換的常見方法是使用序列化和反序列化庫。Rust 有一個流行的序列化庫叫做 serde&#xff0c;它支持多種數據格式。為了將結構體轉換為字節序列&#xff0c;…

保障餐飲場所安全:定期送檢可燃氣體報警器

在餐飲行業&#xff0c;火災隱患一直備受關注。餐廳、茶飲店等場所常常使用燃氣設備&#xff0c;而這些設備帶來了潛在的安全隱患。 為了及時發現并預防可燃氣體泄漏&#xff0c;可燃氣體報警器的定期送檢顯得尤為重要。那么&#xff0c;為什么可燃氣體報警器需要定期送檢呢&a…

【MySQL精通之路】系統變量-動態系統變量

許多服務器系統變量是動態的&#xff0c;可以在運行時進行設置。 參見“變量賦值的SET語法”。 有關設置系統變量的權限要求的描述&#xff0c;請參閱“系統變量權限” 【MySQL精通之路】系統變量-系統變量權限-CSDN博客 下表列出了所有適用于mysqld的動態系統變量。 該表列出…

java 設計模式(三)-- 單例模式

引言 單例模式是一種常用的軟件設計模式&#xff0c;它確保一個類只有一個實例&#xff0c;并提供一個全局訪問點來獲取這個實例。單例模式在Java中實現起來相對簡單&#xff0c;但實現方式有多種&#xff0c;每種方式都有其特點和適用場景。 一、單例模式的實現方式 1. 懶漢…