首頁 後端開發 Python教學 Python對MySQL資料操作的實例詳解

Python對MySQL資料操作的實例詳解

Apr 27, 2017 am 11:47 AM
mysql python 操作

本文介紹Python3使用PyMySQL連接資料庫,並實作簡單的增刪改查。具有很好的參考價值。以下跟著小編一起來看看吧

本文介紹Python3使用PyMySQL連接資料庫,並實作簡單的增刪改查。

什麼是PyMySQL?

PyMySQL是Python3.x版本中用來連接MySQL伺服器的一個函式庫,Python2.x中則是使用mysqldb。

PyMySQL安裝

在使用PyMySQL之前,我們需要先確保PyMySQL已經安裝。

PyMySQL下載網址:https://github.com/PyMySQL/PyMySQL。

如果還未安裝,我們可以使用以下命令安裝最新版的PyMySQL:

$ pip install PyMySQL

如果你的系統不支持pip指令,可以使用以下方式安裝:

1、使用git指令下載安裝套件安裝(你也可以手動下載):

$ git clone https://github.com/PyMySQL/PyMySQL
$ cd PyMySQL
$ python3 setup.py install
登入後複製

2、如果需要製定版本號,可以使用curl指令來安裝:

$ # X.X 为PyMySQL 的版本号
$ curl -L https://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X | tar xz
$ cd PyMySQL*
$ python3 setup.py install
登入後複製

注意:請確保您有root權限來安裝上述模組。

資料庫連線

連線資料庫前,請先確認以下事項:

  • ##您已經建立資料庫TESTDB

  • 在TESTDB資料庫中您已經建立了表EMPLOYEE

  • #EMPLOYEE表欄位為FIRST_NAME,LAST_NAME,AGE,SEX和INCOME

  • 連接資料庫TESTDB使用的使用者名稱為“testuser”,密碼為“test123”,你可以自己設定或直接使用root使用者名稱及其密碼,Mysql資料庫使用者授權請使用Grant指令

  • 在你的機子上已經安裝了PyMySQL模組

#實例:

以下實例連結Mysql的TESTDB資料庫:

#!/usr/bin/python3
__author__ = 'mayi'
import pymysql
# 打开数据库连接
db = pymysql.connect("localhost","testuser","test123","TESTDB" )
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 使用 execute() 方法执行 SQL 查询 
cursor.execute("SELECT VERSION()")
# 使用 fetchone() 方法获取单条数据.
data = cursor.fetchone()
print ("Database version : %s " % data)

# 关闭数据库连接
db.close()
登入後複製

建立資料庫表格

如果資料庫連線存在我們可以使用execute()方法來為資料庫建立資料表,如下所示建立表格EMPLOYEE:

#!/usr/bin/python3
__author__ = 'mayi'
import pymysql

# 开数据库连接
db = pymysql.connect("localhost","testuser","test123","TESTDB" )

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()

# 使用 execute() 方法执行 SQL,如果表存在则删除
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

# 使用预处理语句创建表
sql = """CREATE TABLE EMPLOYEE (
 FIRST_NAME CHAR(20) NOT NULL,
 LAST_NAME CHAR(20),
 AGE INT, 
 SEX CHAR(1),
 INCOME FLOAT )"""
cursor.execute(sql)
# 关闭数据库连接
db.close()
登入後複製

資料庫插入操作

以下實例使用執行SQL Insert語句向表EMPLOYEE插入記錄:

#!/usr/bin/python3
__author__ = 'mayi'

import pymysql

# 打开数据库连接
db = pymysql.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL 插入语句
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
 LAST_NAME, AGE, SEX, INCOME)
 VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try:
 # 执行sql语句
 cursor.execute(sql)
 # 提交到数据库执行
 db.commit()
except:
 # 如果发生错误则回滚
 db.rollback()

# 关闭数据库连接
db.close()
登入後複製

以上範例也可以寫成如下形式:

#!/usr/bin/python3
__author__ = 'mayi'

import pymysql

# 打开数据库连接
db = pymysql.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL 插入语句
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
 LAST_NAME, AGE, SEX, INCOME) \
 VALUES ('%s', '%s', '%d', '%c', '%d' )" % \
 ('Mac', 'Mohan', 20, 'M', 2000)
try:
 # 执行sql语句
 cursor.execute(sql)
 # 执行sql语句
 db.commit()
except:
 # 发生错误时回滚
 db.rollback()

# 关闭数据库连接
db.close()
登入後複製

資料庫查詢操作

Python查詢Mysql使用fetchone()方法取得單一數據,使用fetchall()方法取得多個資料。

  • fetchone():此方法取得下一個查詢結果集。結果集是一個物件

  • fetchall():接收全部的回傳結果行

  • rowcount:這是一個唯讀屬性,並且傳回執行execute()方法後影響的行數

實例:

查詢EMPLOYEE表中salary(薪資)欄位大於1000的所有數據:

#!/usr/bin/python3
__author__ = 'mayi'

import pymysql

# 打开数据库连接
db = pymysql.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL 查询语句
sql = "SELECT * FROM EMPLOYEE \
 WHERE INCOME > '%d'" % (1000)
try:
 # 执行SQL语句
 cursor.execute(sql)
 # 获取所有记录列表
 results = cursor.fetchall()
 for row in results:
 fname = row[0]
 lname = row[1]
 age = row[2]
 sex = row[3]
 income = row[4]
 # 打印结果
 print ("fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
 (fname, lname, age, sex, income ))
except:
 print ("Error: unable to fecth data")

# 关闭数据库连接
db.close()
登入後複製

資料庫更新操作

更新作業用於更新資料表的數據,以下實例將TESTDB表中的SEX欄位全部修改為'M',AGE欄位遞增1:

#!/usr/bin/python3
__author__ = 'mayi'

import pymysql

# 打开数据库连接
db = pymysql.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL 更新语句
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1
 WHERE SEX = '%c'" % ('M')
try:
 # 执行SQL语句
 cursor.execute(sql)
 # 提交到数据库执行
 db.commit()
except:
 # 发生错误时回滚
 db.rollback()

# 关闭数据库连接
db.close()
登入後複製

刪除操作

刪除操作用於刪除資料表中的數據,以下實例示範了刪除資料表EMPLOYEE中AGE大於20的所有資料:

#!/usr/bin/python3
__author__ = 'mayi'

import pymysql

# 打开数据库连接
db = pymysql.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL 删除语句
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
 # 执行SQL语句
 cursor.execute(sql)
 # 提交修改
 db.commit()
except:
 # 发生错误时回滚
 db.rollback()

# 关闭连接
db.close()
登入後複製

執行交易

交易機制可以確保資料一致性。

交易應該具有4個屬性:原子性、一致性、隔離性、持久性。這四個屬性通常稱為ACID特性。

  • 原子性(atomicity)。一個事務是一個不可分割的工作單位,事務中包含的諸操作要么都做,要么都不做。

  • 一致性(consistency)。事務必須是使資料庫從一個一致性狀態變成另一個一致性狀態。一致性與原子性是密切相關的。

  • 隔離性(isolation)。一個事務的執行不能被其他事務幹擾。即一個事務內部的操作及使用的資料對並發的其他事務是隔離的,並發執行的各個事務之間不能互相干擾。

  • 持久性(durability)。持續性也稱為永久性(permanence),指一個事務一旦提交,它對資料庫中資料的改變就應該是永久性的。接下來的其他操作或故障不應該對其有任何影響。

實例

# SQL删除记录语句
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
 # 执行SQL语句
 cursor.execute(sql)
 # 向数据库提交
 db.commit()
except:
 # 发生错误时回滚
 db.rollback()
登入後複製
對於支援交易的資料庫,在Python資料庫程式設計中,當遊標建立之時,就自動開始了一個隱形的資料庫事務。

commit()方法遊標的所有更新操作,rollback()方法回滾目前遊標的所有操作。每一個方法都開始了一個新的事務。

錯誤處理#

異常 描述
#Warning 當有嚴重警告時觸發,例如插入資料是被截斷等等。必須是StandardError的子類別。
Error 警告以外所有其他錯誤類別。必須是StandardError的子類別。
InterfaceError 當有資料庫介面模組本身的錯誤(而不是資料庫的錯誤)發生時觸發。必須是Error的子類別。
DatabaseError 和資料庫相關的錯誤發生時觸發。必須是Error的子類別。
DataError 當有資料處理時的錯誤發生時觸發,例如:除零錯誤,資料超範圍等等。必須是DatabaseError的子類別。
OperationalError 指非使用者控制的,而是在操作資料庫時發生的錯誤。例如:連線意外斷開、資料庫名稱未找到、交易處理失敗、記憶體分配錯誤等等操作資料庫是發生的錯誤。必須是DatabaseError的子類別。
IntegrityError 完整性相關的錯誤,例如外鍵檢查失敗等。必須是DatabaseError子類別。
InternamError 資料庫的內部錯誤,例如遊標(cursor)失效了、交易同步失敗等等。必須是DatabaseError子類別。
ProgrammingError 程式錯誤,例如資料表(table)找不到或已經存在、SQL語句語法錯誤、參數數量錯誤等等。必須是DatabaseError的子類別。
NotSupportedError 不支援錯誤,指使用了資料庫不支援的函數或API等。例如在連線物件上使用rollback()函數,然而資料庫並不支援交易或交易已關閉。必須是DatabaseError的子類別。

以上是Python對MySQL資料操作的實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

在PHP和Python之間進行選擇:指南 在PHP和Python之間進行選擇:指南 Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

MySQL的角色:Web應用程序中的數據庫 MySQL的角色:Web應用程序中的數據庫 Apr 17, 2025 am 12:23 AM

MySQL在Web應用中的主要作用是存儲和管理數據。 1.MySQL高效處理用戶信息、產品目錄和交易記錄等數據。 2.通過SQL查詢,開發者能從數據庫提取信息生成動態內容。 3.MySQL基於客戶端-服務器模型工作,確保查詢速度可接受。

laravel入門實例 laravel入門實例 Apr 18, 2025 pm 12:45 PM

Laravel 是一款 PHP 框架,用於輕鬆構建 Web 應用程序。它提供一系列強大的功能,包括:安裝: 使用 Composer 全局安裝 Laravel CLI,並在項目目錄中創建應用程序。路由: 在 routes/web.php 中定義 URL 和處理函數之間的關係。視圖: 在 resources/views 中創建視圖以呈現應用程序的界面。數據庫集成: 提供與 MySQL 等數據庫的開箱即用集成,並使用遷移來創建和修改表。模型和控制器: 模型表示數據庫實體,控制器處理 HTTP 請求。

PHP和Python:深入了解他們的歷史 PHP和Python:深入了解他們的歷史 Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

解決數據庫連接問題:使用minii/db庫的實際案例 解決數據庫連接問題:使用minii/db庫的實際案例 Apr 18, 2025 am 07:09 AM

在開發一個小型應用時,我遇到了一個棘手的問題:需要快速集成一個輕量級的數據庫操作庫。嘗試了多個庫後,我發現它們要么功能過多,要么兼容性不佳。最終,我找到了minii/db,這是一個基於Yii2的簡化版本,完美地解決了我的問題。

notepad 怎麼運行python notepad 怎麼運行python Apr 16, 2025 pm 07:33 PM

在 Notepad 中運行 Python 代碼需要安裝 Python 可執行文件和 NppExec 插件。安裝 Python 並為其添加 PATH 後,在 NppExec 插件中配置命令為“python”、參數為“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通過快捷鍵“F6”運行 Python 代碼。

MySQL與其他編程語言:一種比較 MySQL與其他編程語言:一種比較 Apr 19, 2025 am 12:22 AM

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

See all articles