利用Python連接MySQL超詳細(xì)實(shí)戰(zhàn)教程
前言
在 Python 開(kāi)發(fā)中,數(shù)據(jù)庫(kù)基本是繞不開(kāi)的核心環(huán)節(jié),而 MySQL + PyMySQL 是最常見(jiàn)、最穩(wěn)定、最輕量的組合。
很多同學(xué)在剛開(kāi)始連接數(shù)據(jù)庫(kù)時(shí),經(jīng)常會(huì)遇到連不上、編碼錯(cuò)誤、游標(biāo)報(bào)錯(cuò)等問(wèn)題。
這篇文章我會(huì)用非常清晰的方式帶你完成:
- PyMySQL 安裝
- 數(shù)據(jù)庫(kù)連接參數(shù)配置
- 創(chuàng)建連接對(duì)象
- 創(chuàng)建游標(biāo)對(duì)象
- 執(zhí)行 SQL 查詢
- 執(zhí)行插入語(yǔ)句
- 完整代碼可直接運(yùn)行
內(nèi)容全部來(lái)自實(shí)戰(zhàn)總結(jié),照著敲你就能用!
一、安裝 PyMySQL
PyMySQL 是 Python 中用于連接 MySQL 的輕量級(jí)庫(kù),安裝方式非常簡(jiǎn)單:
pip install pymysql
安裝完成后我們就可以在項(xiàng)目中使用它進(jìn)行數(shù)據(jù)庫(kù)操作。
二、準(zhǔn)備數(shù)據(jù)庫(kù)連接配置
連接 MySQL 需要提供登錄信息,我們通常將參數(shù)寫(xiě)成一個(gè)字典,方便管理:
import pymysql
db_confing = {
'host': '127.0.0.1', # 服務(wù)器地址
'port': 3306, # MySQL 端口
'user': 'root', # 用戶名
'password': 'root', # 密碼
'db': 'wp', # 需要連接的數(shù)據(jù)庫(kù)
'charset': 'utf8', # 字符編碼
}
? 這些參數(shù)必須真實(shí)存在,否則連接會(huì)失敗。
三、建立數(shù)據(jù)庫(kù)連接
PyMySQL 最核心的一句代碼:
數(shù)據(jù)庫(kù)對(duì)象 = pymysql.connect(**db_confing) print(數(shù)據(jù)庫(kù)對(duì)象)
這里使用 **db_confing 是 Python 字典解包語(yǔ)法,等同于:
host='127.0.0.1', port=3306, user='root' ...
執(zhí)行后會(huì)得到類似:
<pymysql.connections.Connection object at 0xxx>
代表連接成功。
四、創(chuàng)建游標(biāo)對(duì)象(Cursor)
游標(biāo)對(duì)象用來(lái) 執(zhí)行 SQL 與 接收查詢結(jié)果。
游標(biāo)對(duì)象 = 數(shù)據(jù)庫(kù)對(duì)象.cursor() print(游標(biāo)對(duì)象)
每一次查詢、插入,都必須通過(guò)游標(biāo)來(lái)完成。
五、執(zhí)行 SQL 查詢(SELECT)
下面是最常用的查詢模式:
# 創(chuàng)建游標(biāo)對(duì)象
游標(biāo)對(duì)象 = 數(shù)據(jù)庫(kù)對(duì)象.cursor()
# 寫(xiě) SQL 語(yǔ)句
sql = 'SELECT * FROM hk'
# 執(zhí)行 SQL
游標(biāo)對(duì)象.execute(sql)
# 接受所有結(jié)果
返回結(jié)果 = 游標(biāo)對(duì)象.fetchall()
# 打印結(jié)果
for row in 返回結(jié)果:
print(row)
# 關(guān)閉
游標(biāo)對(duì)象.close()
數(shù)據(jù)庫(kù)對(duì)象.close()
這里 fetchall() 會(huì)返回一個(gè) 元組列表,每一行數(shù)據(jù)都是一個(gè)元組。
六、封裝查詢函數(shù)(實(shí)戰(zhàn))
def select():
sql = 'select * from demo'
游標(biāo)對(duì)象.execute(sql)
返回結(jié)果 = 游標(biāo)對(duì)象.fetchall()
print(返回結(jié)果)
你可以在需要的地方直接調(diào)用:
select()
七、執(zhí)行插入(INSERT + commit)
插入與查詢不同,執(zhí)行后必須 commit(),否則無(wú)法真正寫(xiě)入數(shù)據(jù)庫(kù)。
def insert():
name = input('請(qǐng)輸入你的姓名:')
sql = f'insert into demo value(null,"{name}")'
游標(biāo)對(duì)象.execute(sql)
數(shù)據(jù)庫(kù)對(duì)象.commit() # ?? 必須提交
? 注意字符串需要加引號(hào),否則 SQL 會(huì)報(bào)錯(cuò)。
下面我在你 剛剛那篇 CSDN 博客的基礎(chǔ)上,繼續(xù)追加兩個(gè)核心模塊:
? DELETE(刪除數(shù)據(jù))
? UPDATE(修改數(shù)據(jù))
格式依舊符合 CSDN 爆款文章結(jié)構(gòu),你可以直接復(fù)制回博客中,放在原文 “七、執(zhí)行插入(INSERT)” 的后面即可。
八、執(zhí)行刪除(DELETE)
刪除操作同樣需要 commit() 才能生效。
最推薦寫(xiě)成一個(gè)交互式函數(shù):輸入要?jiǎng)h除的 ID,然后執(zhí)行刪除。
def delete():
delete_id = input('請(qǐng)輸入要?jiǎng)h除的ID:')
sql = f'DELETE FROM demo WHERE id = {delete_id}'
游標(biāo)對(duì)象.execute(sql)
數(shù)據(jù)庫(kù)對(duì)象.commit()
print(f'ID 為 {delete_id} 的記錄已刪除')
? 注意:
- DELETE 操作必須加 WHERE 條件
- 否則可能會(huì)刪光整個(gè)表!
示例輸入:
請(qǐng)輸入要?jiǎng)h除的ID:3
輸出:
ID 為 3 的記錄已刪除
九、執(zhí)行修改(UPDATE)
UPDATE 同樣需要提交才能生效。
這是一個(gè)最常見(jiàn)的「根據(jù) ID 修改姓名」的例子:
def update():
update_id = input('請(qǐng)輸入要修改的ID:')
new_name = input('請(qǐng)輸入新的姓名:')
sql = f'UPDATE demo SET name = "{new_name}" WHERE id = {update_id}'
游標(biāo)對(duì)象.execute(sql)
數(shù)據(jù)庫(kù)對(duì)象.commit()
print(f'ID 為 {update_id} 的記錄已成功修改')
執(zhí)行時(shí)會(huì)有兩次輸入:
請(qǐng)輸入要修改的ID:2 請(qǐng)輸入新的姓名:王五
輸出:
ID 為 2 的記錄已成功修改
十、最終完整版(增刪改查四合一)
你可以在原文的最終代碼中加入以下內(nèi)容,結(jié)構(gòu)完全統(tǒng)一:
def select():
sql = 'select * from demo'
游標(biāo)對(duì)象.execute(sql)
返回結(jié)果 = 游標(biāo)對(duì)象.fetchall()
print(返回結(jié)果)
def insert():
name = input('請(qǐng)輸入你的姓名:')
sql = f'insert into demo value(null,"{name}")'
游標(biāo)對(duì)象.execute(sql)
數(shù)據(jù)庫(kù)對(duì)象.commit()
print('插入成功')
def delete():
delete_id = input('請(qǐng)輸入要?jiǎng)h除的ID:')
sql = f'DELETE FROM demo WHERE id = {delete_id}'
游標(biāo)對(duì)象.execute(sql)
數(shù)據(jù)庫(kù)對(duì)象.commit()
print(f'ID 為 {delete_id} 的記錄已刪除')
def update():
update_id = input('請(qǐng)輸入要修改的ID:')
new_name = input('請(qǐng)輸入新的姓名:')
sql = f'UPDATE demo SET name = "{new_name}" WHERE id = {update_id}'
游標(biāo)對(duì)象.execute(sql)
數(shù)據(jù)庫(kù)對(duì)象.commit()
print(f'ID 為 {update_id} 的記錄已成功修改')
總結(jié):增刪改查你已經(jīng)全會(huì)了!
至此為止,你已經(jīng)擁有:
- ? SELECT 查詢
- ? INSERT 插入
- ? DELETE 刪除
- ? UPDATE 修改
- ? commit 提交機(jī)制
- ? 游標(biāo)對(duì)象生命周期
- ? 完整數(shù)據(jù)庫(kù)交互代碼
到此這篇關(guān)于利用Python連接MySQL的文章就介紹到這了,更多相關(guān)Python連接MySQL內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python語(yǔ)言有接口概念嗎(實(shí)例詳細(xì)解釋)
Python通過(guò)鴨子類型實(shí)現(xiàn)接口,而Go和Java則通過(guò)顯式定義接口,Python的接口是隱式的,只要對(duì)象有相應(yīng)的方法,就可以被視為符合接口,本文介紹Python語(yǔ)言有接口概念嗎的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧2026-01-01
Python高效實(shí)現(xiàn)刪除Excel重復(fù)數(shù)據(jù)的三種方法
在?Excel?數(shù)據(jù)處理過(guò)程中,刪除重復(fù)數(shù)據(jù)是最常見(jiàn)的數(shù)據(jù)清理操作之一,使用?Python?進(jìn)行?Excel?去重更加高效、可靠,并支持批量處理和自動(dòng)化,下面我們就來(lái)看看具體的實(shí)現(xiàn)方法吧2025-12-12
Python標(biāo)準(zhǔn)庫(kù)asyncio用法完全指南
Python?asyncio是構(gòu)建高性能異步應(yīng)用程序的終極工具,通過(guò)協(xié)程機(jī)制實(shí)現(xiàn)真正的并發(fā)編程,下面這篇文章主要介紹了Python標(biāo)準(zhǔn)庫(kù)asyncio用法的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-12-12
Pytorch Tensor基本數(shù)學(xué)運(yùn)算詳解
今天小編就為大家分享一篇Pytorch Tensor基本數(shù)學(xué)運(yùn)算詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12
基于sklearn實(shí)現(xiàn)Bagging算法(python)
這篇文章主要為大家詳細(xì)介紹了基于sklearn實(shí)現(xiàn)Bagging算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07
python 使用GDAL實(shí)現(xiàn)柵格tif轉(zhuǎn)矢量shp的方式小結(jié)
今天通過(guò)本文給大家分享python 使用GDAL實(shí)現(xiàn)柵格tif轉(zhuǎn)矢量shp的方式小結(jié),計(jì)劃是使用柵格轉(zhuǎn)矢量的方式,將柵格數(shù)據(jù)轉(zhuǎn)為矢量shp文件,然后進(jìn)行矢量切片,使用Mapbox進(jìn)行前端動(dòng)態(tài)渲染,具體內(nèi)容詳情跟隨小編一起看看吧2021-08-08

