PyMySQL是Python3.x版本中用來連接MySQL服務器的庫,Python2中使用mysqldb。
PyMySQL遵循Python數據庫API v2.0規範,包含純Python MySQL客戶端庫。
PyMySQL安裝
在使用PyMySQL之前,我們需要確保安裝了PyMySQL。
PyMySQL下載地址:/PyMySQL/PyMySQL。
如果沒有,我們可以使用下面的命令來安裝最新版本的PyMySQL:
$ pip3安裝PyMySQL
如果您的系統不支持pip命令,您可以通過以下方式安裝它:
1.使用git命令下載並安裝安裝包(也可以手動下載):
$ git clone/PyMySQL/PyMySQL $ CD PyMySQL/$ python 3 setup . py install
2、如果需要制作版本號,可以使用curl命令來安裝:
$ # X.X是PyMySQL $ curl-l/PyMySQL/PyMySQL/tarball/PyMySQL-X . X | tarxz $ CD PyMySQL * $ python 3 setup . py install的版本號。
$ #現在您可以刪除PyMySQL*目錄了。
註意:請確保您擁有安裝上述模塊的root權限。
在安裝過程中,可能會出現錯誤消息“導入程序錯誤:沒有名為setuptools的模塊”,這意味著您尚未安裝安裝工具。可以訪問mit()除了:?#發生錯誤時回滾
?db.rollback()
#關閉數據庫連接db.close()
上面的例子也可以寫成下面的形式:
實例(Python 3.0以上)
#!/usr/bin/python3
導入pymysql
#打開數據庫連接db = pymysql.connect ("localhost "," testuser "," test123 "," testdb ")。
#使用cursor()方法獲取操作cursor cursor = db.cursor()。
# SQL插入語句SQL = " insert into employee(first _ name,\
?姓氏、年齡、性別、收入)\
?值(' %s ',' %s ',?%s,?' %s ',?%s)" % \?(' Mac ',' Mohan ',20,' M ',2000)試試:?#執行sql語句
?遊標. execute(sql)
?#執行sql語句
?db.commit()除外:?#發生錯誤時回滾
?db.rollback()
#關閉數據庫連接db.close()
以下代碼使用變量將參數傳遞到SQL語句中:
..................................user _ id = " test 123 " password = " password " con . execute(' insert into log in values(% s,%s)' % \(用戶標識,密碼))..................................
數據庫查詢操作
Python查詢Mysql使用fetchone()方法獲取單個數據,使用fetchall()方法獲取多個數據。
fetchone():?該方法獲取下壹個查詢結果集。結果集是壹個對象。
fetchall():?接收所有返回的結果行。
行數:?這是壹個只讀屬性,返回執行execute()方法後受影響的行數。
示例:
查詢雇員表中薪金字段大於1000的所有數據:
實例(Python 3.0以上)
#!/usr/bin/python3
導入pymysql
#打開數據庫連接db = pymysql.connect ("localhost "," testuser "," test123 "," testdb ")。
#使用cursor()方法獲取操作cursor cursor = db.cursor()。
# SQL查詢語句sql = "SELECT * FROM EMPLOYEE \
?其中收入& gt%s" % (1000)試試:?#執行SQL語句
?遊標. execute(sql)
?#獲取所有記錄的列表
?results = cursor.fetchall()
?對於結果中的行:fname = row[0]
?lname = row[1]
?年齡=行[2]
?sex = row[3]
?收入=第[4]行
?#打印結果
?print ("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % \ (fname,lname,age,sex,income))除:?print("錯誤:無法獲取數據")
#關閉數據庫連接db.close()
上述腳本的執行結果如下:
fname=Mac,lname=Mohan,年齡=20,性別=M,收入=2000
數據庫更新操作
更新操作用於更新數據表中的數據。以下示例將TESTDB表中性別為“m”的年齡字段遞增1:
實例(Python 3.0以上)
#!/usr/bin/python3
導入pymysql
#打開數據庫連接db = pymysql.connect ("localhost "," testuser "," test123 "," testdb ")。
#使用cursor()方法獲取操作cursor cursor = db.cursor()。
# SQL update語句SQL = " update employee set age = age+1 where sex = ' % c ' "(' m ')try:?#執行SQL語句
?遊標. execute(sql)
?#提交給數據庫執行
?db.commit()除外:?#發生錯誤時回滾
?db.rollback()
#關閉數據庫連接db.close()
刪除操作
刪除操作用於刪除數據表中的數據。以下示例演示了如何刪除雇員數據表中年齡大於20的所有數據:
實例(Python 3.0以上)
#!/usr/bin/python3
導入pymysql
#打開數據庫連接db = pymysql.connect ("localhost "," testuser "," test123 "," testdb ")。
#使用cursor()方法獲取操作cursor cursor = db.cursor()。
# SQL delete語句SQL = " delete from employer where age >;%s" % (20)嘗試:?#執行SQL語句
?遊標. execute(sql)
?#提交更改
?db.commit()除外:?#發生錯誤時回滾
?db.rollback()
#關閉連接db.close()
行政事務
事務機制可以保證數據的壹致性。
壹個事務應該有四個屬性:原子性、壹致性、隔離性和持久性。這四個屬性通常被稱為酸性特征。
原子性(Atomicity)事務是壹個不可分割的工作單元,事務中包含的所有操作要麽完成,要麽不完成。
壹致性(壹致性)。事務必須將數據庫從壹種壹致狀態更改為另壹種壹致狀態。壹致性與原子性密切相關。
隔離(隔離)。壹個事務的執行不能受到其他事務的幹擾。也就是說,壹個事務中使用的操作和數據是與其他並發事務隔離的,並發事務之間不能互相幹擾。
耐用性(耐久性)。持久性,也稱為永久性,意味著壹旦提交了事務,它對數據庫中數據的更改應該是永久的。其他後續操作或失敗應該不會對其產生任何影響。
Python DB API 2.0中的事務提供了兩種方法:提交或回滾。
例子
實例(Python 3.0以上)
# SQL delete記錄語句SQL = " delete from employee where age >;%s" % (20)嘗試:?#執行SQL語句
?遊標. execute(sql)
?#提交到數據庫
?db.commit()除外:?#發生錯誤時回滾
?db.rollback()
對於支持事務的數據庫,在Python數據庫編程中,建立遊標時,會自動啟動壹個不可見的數據庫事務。
Commit()方法用於更新遊標的所有操作,rollback()方法用於回滾當前遊標的所有操作。每個方法都會啟動壹個新的事務。
錯誤處理
DB API中定義了壹些數據庫操作錯誤和異常,下表列出了這些錯誤和異常:
反常的
形容
當出現嚴重警告時,會觸發警告,例如,插入的數據被截斷等等。必須是StandardError的子類。
除錯誤警告之外的所有其他錯誤類別。必須是StandardError的子類。
當數據庫接口模塊本身出現錯誤(不是數據庫錯誤)時,會觸發InterfaceError。必須是Error的子類。
發生數據庫相關錯誤時觸發DatabaseError。必須是Error的子類。
DataError在數據處理中出現錯誤時觸發,如被零除錯誤、數據超出範圍等。必須是DatabaseError的子類。
OperationalError是指不受用戶控制,但在操作數據庫時發生的錯誤。例如,連接意外斷開、找不到數據庫名稱、事務失敗、內存分配錯誤等等。必須是DatabaseError的子類。
IntegrityError與完整性相關的錯誤,如外鍵檢查失敗等。必須是DatabaseError的子類。
InternalError數據庫中的內部錯誤,如遊標失敗、事務同步失敗等。必須是DatabaseError的子類。
ProgrammingError程序錯誤,如表未找到或已存在,SQL語句的語法錯誤,參數數目錯誤等。必須是DatabaseError的子類。
NotSupportedError不支持錯誤,指的是使用數據庫不支持的函數或API。例如,在。rollback()函數用於連接對象,但數據庫不支持事務或事務已關閉。必須是DatabaseError的子類。