3.python操作mysql數據庫

前言:在現代應用程序中,數據庫扮演者至關重要的角色。mysql是一個流行的關系型數據庫管理系統,廣泛應用于各種規模的應用中。在pytho中,我們可以通過連接庫與mysql數據庫進行交互,實現數據的增刪改查操作。與此同時,為了提高應有的性能,連接池作為一個優化數據庫連接管理技術,得到了廣泛的應用

一:安裝Python MySQL連接庫

用于與mysql數據庫進行交互

1:安裝mysql-connector-python

pip install mysql-connector-python

2:安裝pymysql(作為代替)

pip install pymysql

二:python連接mysql數據庫

vim aaa.py

import pymysql? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?/1

db = pymysql.connect(host="192.168.10.101",user="root",password="pwd123",database="testdb")? /2

cursor = db.cursor()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?/3

cursor.execute("select * from users")? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /4

results = cursor.fetchall()
for row in results:
? ? ? ? ?print(row)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?/5

cursor.close()
db.close()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /6
以上五個部分解釋:

1:導入數據庫,需要導入pymysql模塊,使用它來連接mysql數據庫并執行sql語句

2:創建數據庫連接,pymysql.connect()方法來建立數據庫連接。連接時需要提供mysql服務器的地址、用戶名、密碼和我們要訪問的數據庫名

3:創建游標對象,建立連接之后,需要創建一個游標對象,通過它來執行sql語句

4:執行sql語句,通過游標對象的execute()方法,我們可以執行sql語句,在執行sql語句時,可以使用%s占位符來避免sql注入攻擊

5:獲取查詢結果,對于查詢操作,fetchall()方法用于獲取所有結果,fetchone()方法用于獲取單條記錄

6:關閉連接:操作完成后,需要關閉游標和數據庫連接

三:常見的mysql操作

1:插入數據(INSERT)

插入數據時,我們使用insert into語句,通過execute()方法執行插入操作。為了防止SQL注入攻擊,插入語句中的值應使用%s占位符

cursor.execute("insert into users (name,age) values (%s,%s)",("Alice",25))

db.commit()? ? ? ? ? ? ? ? ? ? ? ? ?/提交事務,保存插入數據

2:更新數據(UPDATE)

更新數據時,使用update語句,通過execute()方法執行,通常會添加where條件,以確保只更新需要更新的記錄

cursor.execute("update users set age=%s where name = %s",(26,"Alice"))

db.commit()? ?

3:刪除數據(DELETE)

刪除數據時,使用delete語句,并通過where條件確保刪除特定記錄

cursor.execute("delete from users where name =%s",("Alice",))

db.commit()? ?

4:查詢數據(SELECT)

查詢數據時,使用select語句。可以使用fetchall()獲取所有記錄,或使用fetchone()獲取一條記錄

cursor.execute("select * from users")

results=cursor.fetchall()

for row in results:

? ? ?print(row)

5:執行多條sql語句

對于批量插入、更新等操作,可以使用executemany()方法一次執行多條sql語句

cursor.executemany("insert into user (name,age) values (%s,%s)",[ ("Bob",30),("charlie",35)] )

db.commit()

6:使用LIKE進行模糊查詢

LIKE關鍵字允許你進行模糊查詢。可以使用%通配符來匹配任意字符

cursor.execute("select * from users where name like %s",("%a%",))

results=cursor.fetchall()

for row in results:

? ? ? ? print(row)

7:使用JOIN進行聯合查詢

在多個表之間建立關系時,JOIN關鍵字用于合并多個表的數據

cursor.execute(""" select users.name,orders.amount from users inner join orders on users.id=orders.user_id """)

results=cursor.fetchall()

for row in results:

? ? ?print(row)

四:使用連接池

1:連接池簡介

連接池技術能夠在高并發場景下提升數據庫連接的效率,在連接池中,多個數據庫連接被提前創建并放入池中,客戶端通過池獲取連接,而不是每次都建立新的連接。這大大減少了連接和銷毀的開銷

2:創建連接遲

pymysql并不直接支持連接池,但我們可以使用DBUtils庫萊創建連接池。首先需要安裝DButils:

pip install dbutils

from dbutils.pooled_db import pooledDB

import pymysql

dbconfig= {? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? "host":"localhost",

? ? ? ? "user":"root",

? ? ? ? "password":"pwd123",

? ? ? ? "database":"testdb"

? ? ? ? }? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?/數據庫連接配置

connection_pool=PooledDB(

? ? ? ? creator=pymysql,? ? ? ? ? ? ? ? ? ? ? ? ? ?/使用pymysql作為數據庫連接庫

? ? ? ? maxconnections=5,? ? ? ? ? ? ? ? ? ? ? ?/連接池中最大連接數

? ? ? ? **dbconfig

)

3:獲取連接

從連接池中獲取連接時,可以使用connection()方法。每次獲取到的連接都可以直接執行數據庫操作

db_connection=connection_pool.connection()

cursor=db_connection.cursor()

cursor.exesute("select *? from users")

results=cursor.fetchall()

for row in results:

? ? ?print(row)

cursor.close()

db_connection.close()? ? ? ? ? ? ? ? ? ? ? ? ? /連接會自動歸還給連接池

4:連接池的優勢

性能提升:連接池減少了每次數據庫操作時創建新連接的開銷,提高了數據庫操作的效率

資源管理:連接池能夠限制最大連接數,避免因過多的數據庫連接導致數據庫過載

更易管理:通過連接池,可以統一管理連接的生命周期,簡化代碼結構

五:事務管理

事務是由多個sql語句組成的一個工作單元。事務保證了數據的原子性,即所有操作要么都成功,要么都失敗

1:開始事務

事務可以通過start transaction來顯式開啟,但一般我們通過執行sql語句來啟動事務

cursor.execute("start transaction")

2:提交事務

如果事務中的所有操作都成功,我們使用commit()方式提交事務,保存對數據庫的更改

db.commit()

3:回滾事務

如果事務中的某些操作失敗,我們可以使用rollback()方法回滾事務,將所有更改撤銷

db.rollback()

4:事務的隔離級別

mysql支持四種事務隔離級別,它們定義了在并發事務執行時一個事務的操作對于其他事務的影響

隔離級別的設置越高,事務間的干擾越小,但同時可能導致性能下降。mysql的默認隔離級別是repeatable read,具體如下;

(1)READ UNCOMMITTED(未提交讀)

描述:事務可以讀取其他事務未提交的數據,可能導致“臟讀”(Dirty Read)。這種級別下,事務間的隔離性最差。
應用場景:通常不推薦使用,除非對數據一致性要求不高。

使用方法:

cursor.execute("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED" )

(2)READ COMMITTED(提交讀)

描述:事務只能讀取其他事務已經提交的數據,避免了臟讀,但仍然可能遇到“不可重復讀”(Non-repeatable Read)的問題。即事務中讀取的數據在兩次讀取時可能發生變化(另個事務已提交了修改)。
應用場景:適用于大多數常見場景,提供了一定的隔離性,同時保證了較好的性能。
使用方法:

cursor.execute("SET TRANSACTION ISOLATION LEVEL READ COMMITTED")

(3)REPEATABLE READ(可重復讀)

描述:事務可以保證在事務內多次讀取同一數據時,其值不會發生變化。這避免了“不可重復讀”的問題,但依然可能會出現“幻讀”(Phantom Read),即一個事務讀取的數據集在事務執行過程中發生了變化。
應用場景:對于需要保證事務數據一致性的場景,例如金融系統中的余額操作等,可以考慮使用該隔離級別。
使用方法:

Cursor.execute("SET TRANSACTION ISOLATION LEVEL REPEATABLE READ" )

(4)SERIALIZABLE(串行化)

描述:這是最嚴格的事務隔離級別,事務會被執行得像串行一樣,完全避免了臟讀、不可重復讀和幻讀。然而,這種隔離級別的性能開銷最大,可能導致大量的鎖競爭。
應用場景:適用于對數據一致性要求極高的場景,如庫存管理系統、銀行轉賬等。

使用方法:

cursor.execute("SET TRANSACTION ISOLATION LEVEL SERIALIZABLE")

5:事務隔離級別總結

READ UNCOMMITTED:允許臟讀,最低的隔離級別,性能最好,但容易出現數據不一致的情況。READ COMMITTED:解決了臟讀問題,但可能出現不可重復讀。
REPEATABLE READ:解決了臟讀和不可重復讀問題,但可能出現幻讀,
SERIALIZABLE:解決了所有問題,但性能最差,可能導致事務長時間等待。

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

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

相關文章

day023-網絡基礎與OSI七層模型

文章目錄 1. 網絡基礎知識點1.1 網絡中的單位1.2 查看實時網速:iftop1.3 交換機、路由器 2. 路由表2.1 查看路由表的命令2.2 路由追蹤命令 3. 通用網站網絡架構4. 局域網上網原理-NAT5. 虛擬機上網原理6. 虛擬機的網絡模式6.1 NAT模式6.2 橋接模式6.3 僅主機模式 7.…

DeepSeek智能對話助手項目

目錄: 1、效果圖2、實現代碼3、溫度和TopK的作用對比 1、效果圖 2、實現代碼 # import gradio as gr# def reverse_text(text): # return text[::-1]# demogr.Interface(fnreverse_text,inputs"text",outputs"text")# demo.launch(share&q…

視覺中國:鏡頭下的中國發展圖景

2025年5月下旬,從北國草原到江南水鄉,從文化遺產到科技創新,中國大地上演著一幕幕生機勃勃的圖景。河北張家口的沙狐幼崽與濕地生態和諧共生,湖北襄陽的茶園雕琢出詩意田園;北京殷商文創的活力、沈陽文物情景劇的創意&…

LabVIEW 中內存釋放相關問題

在LabVIEW 編程領域,內存管理是一個關鍵且復雜的議題。我們常常關注 LabVIEW 如何將內存釋放回操作系統(OS),以及是否有方法確保在特定數據結構(如隊列、變體屬性、動態數據引用 DVR 等)銷毀、刪除或清空后…

基于正點原子阿波羅F429開發板的LWIP應用(4)——HTTP Server功能

說在開頭 正點原子F429開發板主芯片采用的是STM32F429IGT6,網絡PHY芯片采用的是LAN8720A(V1)和YT8512C(V2),采用的是RMII連接,PHY_ADDR為0;在代碼中將會對不同的芯片做出適配。 CubeMX版本:6.6.1; F4芯片組…

設計模式-結構型模式(詳解)

適配器模式 將一個類的接口轉換成客戶端期望的另一個接口,解決接口不兼容問題。 適配器模式由四部分組成: 客戶端:即需要使用目標接口的類 目標接口 需要適配的類,也就是已經存在好的功能,但客戶端通過目標接口沒辦…

銀河麒麟操作系統下載

產品試用申請國產操作系統、麒麟操作系統——麒麟軟件官方網站 下載頁面鏈接如上,申請試用即可。 申請試用填寫后提交,界面就變成了這樣,可以挑選適合自己的版本。 海思麒麟9006C版,如下: 本地下載:Kylin…

[CARLA系列--03]如何打包生成CARLA 0.9.15的非編輯版(地圖的加載與卸載)

前兩篇文章介紹了如何去安裝可編輯版的CARLA 0.9.15,這個完整的工程文件實在是太大了,大概消耗了100個G的磁盤空間,當在進行一個CARLA項目的時候,不利于在每個開發電腦都去安裝部署一套CARLA 0.9.15的源碼,所以把自己這…

【機器學習基礎】機器學習入門核心算法:樸素貝葉斯(Naive Bayes)

機器學習入門核心算法:樸素貝葉斯(Naive Bayes)) 一、算法邏輯1.1 基本概念1.2 基本流程 二、算法原理與數學推導2.1 貝葉斯定理2.2 樸素貝葉斯分類器2.3 不同分布假設下的概率計算2.3.1 高斯樸素貝葉斯(連續特征&…

云服務器系統盤滿了,但是其他正常,是否可能是被攻擊了

目錄 問題背景分析解決系統盤滿的問題解決結果 問題背景 今天登錄我的云服務器看了眼,發現系統盤滿了,但是其他正常 分析 1、首先要確認是否是被攻擊: top / htop (安裝:yum install htop 或 apt install htop):…

雙因子COX 交互 共線性 -spss

SPSS 簡要界面操作步驟(針對雙因子 COX 分析) 1. 數據準備 變量格式:確保數據已整理為以下格式(示例): 時間變量(如 Time_to_Recurrence)結局變量(如 Recurrence:1=復發,0=未復發)預測變量(CSPG4_HSCORE、FAM49B_Status 二分類變量)協變量(如 Lesion_Size、Pat…

【MySQL】第12節|MySQL 8.0 主從復制原理分析與實戰(二)

一、組復制(MGR)核心概念 1. 定義與定位 目標:解決傳統主從復制的單點故障、數據不一致問題,提供高可用、高擴展的分布式數據庫方案。基于 GTID:依賴全局事務標識符(GTID)實現事務一致性&…

React 泛型組件:用TS來打造靈活的組件。

文章目錄 前言一、什么是泛型組件?二、為什么需要泛型組件?三、如何在 React 中定義泛型組件?基礎泛型組件示例使用泛型組件 四、泛型組件的高級用法帶默認類型的泛型組件多個泛型參數 五、泛型組件的實際應用場景數據展示組件表單組件狀態管…

如何手搓一個查詢天氣的mcp server

環境配置煩請移步上一篇博客 這里直接步入主題,天氣查詢的api用的是openweather,免費注冊就可以使用了 每天1000次內使用時免費的,大概的api 如下 https://api.openweathermap.org/data/2.5/weather?qBeijing,cn&APPID注冊后可以拿到一個…

深入解析計算機網絡核心協議:ARP、DHCP、DNS與HTTP

文章目錄 一、ARP(地址解析協議)1.1 定義與功能1.2 工作原理1.3 應用場景1.4 安全風險與防御 二、DHCP(動態主機配置協議)2.1 定義與功能2.2 工作原理2.3 應用場景2.4 優缺點與安全建議 三、DNS(域名系統)3…

《Java 單例模式:從類加載機制到高并發設計的深度技術剖析》

【作者簡介】“琢磨先生”--資深系統架構師、985高校計算機碩士,長期從事大中型軟件開發和技術研究,每天分享Java硬核知識和主流工程技術,歡迎點贊收藏! 一、單例模式的核心概念與設計目標 在軟件開發中,我們經常會遇…

NL2SQL代表,Vanna

Vanna 核心功能、應用場景與技術特性詳解 一、核心功能 1. 自然語言轉SQL查詢 Vanna 允許用戶通過自然語言提問(如“顯示2024年銷售額最高的產品”),自動生成符合數據庫規范的SQL查詢語句。其底層采用 RAG(檢索增強生成&#xf…

【動態規劃】子數組系列(二)

📝前言說明: 本專欄主要記錄本人的動態規劃算法學習以及LeetCode刷題記錄,按專題劃分每題主要記錄:(1)本人解法 本人屎山代碼;(2)優質解法 優質代碼;&…

68元開發板,開啟智能硬件新篇章——明遠智睿SSD2351深度解析

在智能硬件開發領域,開發板的選擇至關重要。它不僅關系到項目的開發效率,還直接影響到最終產品的性能與穩定性。而今天,我要為大家介紹的這款明遠智睿SSD2351開發板,僅需68元,卻擁有遠超同價位產品的性能與功能&#x…

篇章六 數據結構——鏈表(二)

目錄 1. LinkedList的模擬實現 1.1 雙向鏈表結構圖?編輯 1.2 三個簡單方法的實現 1.3 頭插法 1.4 尾插法 1.5 中間插入 1.6 刪除 key 1.7 刪除所有key 1.8 clear 2.LinkedList的使用 2.1 什么是LinkedList 5.2 LinkedList的使用 1.LinkedList的構造 2. LinkedList的…