最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python操作MySQL數(shù)據(jù)庫的方法實(shí)例

 更新時(shí)間:2026年07月29日 09:14:25   作者:炸炸魚.  
我們經(jīng)常需要將大量數(shù)據(jù)保存起來以備后續(xù)使用,數(shù)據(jù)庫是一個(gè)很好的解決方案,這篇文章主要介紹了Python操作MySQL數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下

前言

在現(xiàn)代應(yīng)用程序中,數(shù)據(jù)庫至關(guān)重要。MySQL 是流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),廣泛用于各類應(yīng)用。本文以 MySQL 服務(wù)器:192.168.10.101Python 服務(wù)器:192.168.10.102 為例,講解 Python 遠(yuǎn)程操作 MySQL 完整流程,包含連接、CRUD、模糊查詢、JOIN、事務(wù)、隔離級(jí)別、連接池,并補(bǔ)充 MySQL 端創(chuàng)建遠(yuǎn)程用戶、授權(quán)、舊認(rèn)證插件兼容。

一、安裝 Python MySQL 連接庫

1. 安裝命令

pip install mysql-connector-python
pip install pymysql

2. 補(bǔ)充知識(shí)點(diǎn)

  • pymysql:純 Python 實(shí)現(xiàn)的 MySQL 客戶端,跨平臺(tái),支持 TCP/IP 遠(yuǎn)程連接。
  • dbutils:數(shù)據(jù)庫連接池組件,用于復(fù)用連接,減少創(chuàng)建 / 銷毀連接的開銷。
  • mysql-connector-python:MySQL 官方驅(qū)動(dòng),可作為 pymysql 備選。
  • 生產(chǎn)環(huán)境建議固定庫版本,避免兼容性問題。

二、MySQL 服務(wù)器端配置(192.168.10.101)

執(zhí)行位置:MySQL 命令行(mysql -u root -p)

1. 創(chuàng)建遠(yuǎn)程訪問用戶

CREATE USER 'root'@'192.168.10.102' IDENTIFIED BY 'pwd123';

2. 授權(quán)數(shù)據(jù)庫權(quán)限

sql

GRANT REPLICATION  ON *.* TO 'root'@'192.168.10.102';

3. 舊密碼認(rèn)證插件兼容

sql

ALTER USER 'root'@'192.168.10.102' IDENTIFIED WITH mysql_native_password BY 'pwd123';

4. 刷新權(quán)限

FLUSH PRIVILEGES;

5.添加數(shù)據(jù)

-- 創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE IF NOT EXISTS testdb;

-- 切換到 testdb 數(shù)據(jù)庫
USE testdb;

-- 創(chuàng)建 users 表
CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    age INT NOT NULL
);

-- 創(chuàng)建 orders 表
CREATE TABLE IF NOT EXISTS orders (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT,
    amount DECIMAL(10, 2) NOT NULL,
    order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);

-- 插入數(shù)據(jù)到 users 表
INSERT INTO users (name, age) VALUES
('Alice', 25),
('Bob', 30),
('Charlie', 35),
('David', 28);

-- 插入數(shù)據(jù)到 orders 表
INSERT INTO orders (user_id, amount) VALUES
(1, 100.50),
(2, 150.75),
(3, 200.00),
(1, 50.25);

-- -- 查詢所有用戶信息
-- SELECT * FROM users;

-- -- 查詢所有訂單信息
-- SELECT * FROM orders;

-- -- 查詢用戶及其對(duì)應(yīng)的訂單信息(JOIN查詢)
-- SELECT users.name, users.age, orders.amount
-- FROM users
-- JOIN orders ON users.id = orders.user_id;

-- -- 更新某個(gè)用戶的數(shù)據(jù),修改 Bob 的年齡
-- UPDATE users SET age = 31 WHERE name = 'Bob';

-- -- 刪除 Charlie 用戶及其對(duì)應(yīng)的訂單數(shù)據(jù)
-- DELETE FROM orders WHERE user_id = (SELECT id FROM users WHERE name = 'Charlie');
-- DELETE FROM users WHERE name = 'Charlie';

-- -- 設(shè)置事務(wù)隔離級(jí)別為 REPEATABLE READ
-- SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

補(bǔ)充知識(shí)點(diǎn)

  • MySQL 8.0+ 默認(rèn)認(rèn)證插件:caching_sha2_password,pymysql 不支持。
  • mysql_native_password:MySQL 5.x 與 pymysql 兼容插件。
  • @'192.168.10.102':僅允許該 Python 服務(wù)器連接,更安全。
  • 授權(quán)后必須 FLUSH PRIVILEGES 才能生效。

三、Python 連接 MySQL 數(shù)據(jù)庫

創(chuàng)建文件:01_connect.py

import pymysql

db = pymysql.connect(
    host="192.168.10.101",  #MySQL數(shù)據(jù)庫的地址
    user="root",           #數(shù)據(jù)庫的用戶名
    password="pwd123",     #密碼
    database="testdb",     #要連接的數(shù)據(jù)庫的名稱
    charset="utf8mb4"
)         #創(chuàng)建數(shù)據(jù)庫的連接

cursor = db.cursor()   #創(chuàng)建游標(biāo)對(duì)象

cursor.execute("select * from users")   #執(zhí)行SQL語句

results=cursor.fetchall()
for row in results:
    print(row)       #獲取查詢結(jié)果


data = cursor.fetchone()
print("MySQL 版本:", data)


cursor.close()   #關(guān)閉游標(biāo)連接
db.close()     #關(guān)閉數(shù)據(jù)庫連接

補(bǔ)充知識(shí)點(diǎn)

  • host:必須寫 MySQL 遠(yuǎn)程 IP,不能寫 localhost。
  • charset=utf8mb4:支持中文、表情,生產(chǎn)標(biāo)準(zhǔn)字符集。
  • cursor:執(zhí)行 SQL、獲取結(jié)果的對(duì)象。
  • 必須關(guān)閉游標(biāo)與連接,避免資源泄漏。

執(zhí)行命令

python3 01_connect.py

四、常見的 MySQL 操作

創(chuàng)建文件:02_operate.py  (根據(jù)情況來寫是添加還是刪除,可以在01_connect.py的文件基礎(chǔ)上做改動(dòng),改SQL語句就行?。。∪缓蟾鶕?jù)情況改是添加還是修改什么的。然后可以在MySQL上面進(jìn)行查看)

import pymysql

db = pymysql.connect(
    host="192.168.10.101",
    user="root",
    password="pwd123",
    database="testdb",
    charset="utf8mb4"
)
cursor = db.cursor()

# 創(chuàng)建表
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    age INT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
""")

# 插入
cursor.execute("INSERT INTO users(name, age) VALUES(%s, %s)", ("Alice", 25))
db.commit()

# 查詢
cursor.execute("SELECT * FROM users")
results = cursor.fetchall()
for row in results:
    print(row)

# 更新
cursor.execute("UPDATE users SET age=%s WHERE name=%s", (26, "Alice"))
db.commit()

# 刪除
cursor.execute("DELETE FROM users WHERE name=%s", ("Alice",))
db.commit()

# 模糊查詢
cursor.execute("SELECT * FROM users WHERE name LIKE %s", ("%li%",))
print("模糊查詢:", cursor.fetchall())

# 聯(lián)合查詢
cursor.execute("""
SELECT users.name, orders.amount
FROM users
INNER JOIN orders ON users.id = orders.user_id
""")
print("聯(lián)合查詢:", cursor.fetchall())

cursor.close()
db.close()

補(bǔ)充知識(shí)點(diǎn)

  • 增刪改必須 commit(),否則不寫入數(shù)據(jù)庫。
  • %s 占位符防止 SQL 注入。
  • fetchall():獲取全部;fetchone():獲取一條。
  • LIKE %xxx%:全模糊匹配。
  • INNER JOIN:只返回匹配成功的記錄。

執(zhí)行命令

python3 02_operate.py

五、事務(wù)管理

創(chuàng)建文件:03_transaction.py

import pymysql

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

db.autocommit = False

try:
    cursor.execute("INSERT INTO users(name, age) VALUES('Tom', 20)")
    cursor.execute("UPDATE users SET age=21 WHERE name='Tom'")
    db.commit()
    print("事務(wù)執(zhí)行成功")
except:
    db.rollback()
    print("事務(wù)已回滾")
finally:
    cursor.close()
    db.close()

補(bǔ)充知識(shí)點(diǎn)(ACID 完整)

  • 原子性(Atomicity)事務(wù)是最小單元,所有 SQL 要么全成功,要么全失敗回滾。
  • 一致性(Consistency)事務(wù)前后數(shù)據(jù)完整性約束(主鍵、外鍵、非空)不被破壞。
  • 隔離性(Isolation)并發(fā)事務(wù)相互隔離,避免臟讀、不可重復(fù)讀、幻讀。
  • 持久性(Durability)事務(wù)提交后,修改永久生效,數(shù)據(jù)庫崩潰也不丟失。

執(zhí)行命令

python3 03_transaction.py

六、MySQL 四種事務(wù)隔離級(jí)別

執(zhí)行位置:MySQL 命令行

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

補(bǔ)充知識(shí)點(diǎn)

  1. READ UNCOMMITTED:可讀取未提交數(shù)據(jù) → 臟讀。
  2. READ COMMITTED:只能讀已提交數(shù)據(jù) → 解決臟讀。
  3. REPEATABLE READ:MySQL 默認(rèn) → 解決臟讀、不可重復(fù)讀。
  4. SERIALIZABLE:最高級(jí)別,串行執(zhí)行 → 無并發(fā)問題,性能最低。

七、使用連接池

1.需要先安裝相關(guān)軟件

pip install dbutils

2.創(chuàng)建文件:04_pool.py

from dbutils.pooled_db import PooledDB
import pymysql

#數(shù)據(jù)庫的連接配置
pool = PooledDB(
    creator=pymysql,
    host="192.168.10.101",
    user="root",
    password="pwd123",
    database="testdb",
    charset="utf8mb4",
    maxconnections=10,
    mincached=2
)     
  
#創(chuàng)建連接池
connection_pool=PooledDb(
    creator=pymysql,    #使用pymysql作為數(shù)據(jù)庫連接庫
    maxconnection=5,    #連接池中最大連接數(shù)
    **dbconfig
)

#獲取連接
db_connection=connection_pool.connection()
cursor=db_connecction.cursor()

cursor.execute("select * from users")
results=cursor.fetchall()

for row in results:
    print(row)

cursor.close()
db_connection.close()   #連接會(huì)自動(dòng)歸還給連接池

補(bǔ)充知識(shí)點(diǎn)

  • 連接池預(yù)先創(chuàng)建連接,避免頻繁創(chuàng)建 / 銷毀,性能提升明顯。
  • close() 是歸還連接池,不是關(guān)閉物理連接。
  • maxconnections:最大連接數(shù),保護(hù)數(shù)據(jù)庫。
  • mincached:初始空閑連接數(shù),提升啟動(dòng)速度。
  • 高并發(fā)項(xiàng)目必須使用連接池。

執(zhí)行命令

python3 04_pool.py

總結(jié)

到此這篇關(guān)于Python操作MySQL數(shù)據(jù)庫的文章就介紹到這了,更多相關(guān)Python操作MySQL數(shù)據(jù)庫內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 為什么Python中沒有

    為什么Python中沒有"a++"這種寫法

    一開始學(xué)習(xí) Python 的時(shí)候習(xí)慣性的使用 C 中的 a++ 這種寫法,發(fā)現(xiàn)會(huì)報(bào) SyntaxError: invalid syntax 錯(cuò)誤,為什么 Python 沒有自增運(yùn)算符的這種寫法呢?下面小編給大家?guī)肀疚膸椭蠹伊私庀逻@方面的知識(shí)
    2018-11-11
  • python抓取并保存html頁面時(shí)亂碼問題的解決方法

    python抓取并保存html頁面時(shí)亂碼問題的解決方法

    這篇文章主要介紹了python抓取并保存html頁面時(shí)亂碼問題的解決方法,結(jié)合實(shí)例形式分析了Python頁面抓取過程中亂碼出現(xiàn)的原因與相應(yīng)的解決方法,需要的朋友可以參考下
    2016-07-07
  • pytorch 多分類問題,計(jì)算百分比操作

    pytorch 多分類問題,計(jì)算百分比操作

    這篇文章主要介紹了pytorch 多分類問題,計(jì)算百分比操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • python 提取tuple類型值中json格式的key值方法

    python 提取tuple類型值中json格式的key值方法

    今天小編就為大家分享一篇python 提取tuple類型值中json格式的key值方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 分析語音數(shù)據(jù)增強(qiáng)及python實(shí)現(xiàn)

    分析語音數(shù)據(jù)增強(qiáng)及python實(shí)現(xiàn)

    數(shù)據(jù)增強(qiáng)是一種生成合成數(shù)據(jù)的方法,即通過調(diào)整原始樣本來創(chuàng)建新樣本。這樣我們就可獲得大量的數(shù)據(jù)。這不僅增加了數(shù)據(jù)集的大小,還提供了單個(gè)樣本的多個(gè)變體,這有助于我們的機(jī)器學(xué)習(xí)模型避免過度擬合
    2021-06-06
  • Django數(shù)據(jù)庫表反向生成實(shí)例解析

    Django數(shù)據(jù)庫表反向生成實(shí)例解析

    這篇文章主要介紹了Django數(shù)據(jù)庫表反向生成實(shí)例解析,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • 對(duì)python requests發(fā)送json格式數(shù)據(jù)的實(shí)例詳解

    對(duì)python requests發(fā)送json格式數(shù)據(jù)的實(shí)例詳解

    今天小編就為大家分享一篇對(duì)python requests發(fā)送json格式數(shù)據(jù)的實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • pygame實(shí)現(xiàn)飛機(jī)大戰(zhàn)

    pygame實(shí)現(xiàn)飛機(jī)大戰(zhàn)

    這篇文章主要為大家詳細(xì)介紹了pygame實(shí)現(xiàn)飛機(jī)大戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Python利用ftplib庫實(shí)現(xiàn)ftp文件傳輸自動(dòng)化全攻略

    Python利用ftplib庫實(shí)現(xiàn)ftp文件傳輸自動(dòng)化全攻略

    本文介紹了Python標(biāo)準(zhǔn)庫ftplib的使用方法,詳細(xì)描述了連接與登錄、目錄操作、文件上傳下載、文件管理、目錄列表查看等核心函數(shù),并提供了兩個(gè)實(shí)戰(zhàn)案例,幫助實(shí)現(xiàn)FTP自動(dòng)化操作,需要的朋友可以參考下
    2026-04-04
  • django 多數(shù)據(jù)庫及分庫實(shí)現(xiàn)方式

    django 多數(shù)據(jù)庫及分庫實(shí)現(xiàn)方式

    這篇文章主要介紹了django 多數(shù)據(jù)庫及分庫實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04

最新評(píng)論

惠州市| 高安市| 韶关市| 沙坪坝区| 叶城县| 神池县| 黄陵县| 达拉特旗| 湘潭县| 西乡县| 蓝田县| 兴仁县| 微博| 宜川县| 舟曲县| 南华县| 旬阳县| 苍梧县| 马龙县| 涡阳县| 神木县| 临桂县| 丰顺县| 东辽县| 西昌市| 宁城县| 四川省| 桃园市| 临邑县| 黄大仙区| 安义县| 阿巴嘎旗| 永登县| 教育| 米泉市| 桦甸市| 绍兴县| 永德县| 个旧市| 彭州市| 石台县|