一、安裝pymysql插件
直接在pycharm中安裝即可。
二、使用
1、數據庫插入操作
insert
注意:
insert語句需要提交,使用commit()
如果報錯,需要回滾。使用rollback()
循環插入數據:
2、數據庫查詢操作
Python查詢 mysql時使用fetchone()方法獲取單條數據,使用fetchall()方法獲取多條數據
fetchone(): 該方法獲取下一個查詢結果集。結果集是一個對象
fetchall(): 接收全部的返回結果行.
rowcount: 這是一個只讀屬性,並返回執行execute()方法后影響的行數。
3、數據庫更新操作
4、數據庫刪除操作
5、執行事務
事務機制可以確保數據一致性。
事務應該具有4個屬性:原子性、一致性、隔離性、持久性。這四個屬性通常稱為ACID特性。
原子性(atomicity)。一個事務是一個不可分割的工作單位,事務中包括的諸操作要么都做,要么都不做。
一致性(consistency)。事務必須是使數據庫從一個一致性狀態變到另一個一致性狀態。一致性與原子性是密切相關的。
隔離性(isolation)。一個事務的執行不能被其他事務干擾。即一個事務內部的操作及使用的數據對並發的其他事務是隔離的,並發執行的各個事務之間不能互相干擾。
持久性(durability)。持續性也稱永久性(permanence),指一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。接下來的其他操作或故障不應該對其有任何影響。
異常 |
描述 |
Warning |
當有嚴重警告時觸發,例如插入數據是被截斷等等。必須是 StandardError 的子類。 |
Error |
警告以外所有其他錯誤類。必須是 StandardError 的子類。 |
InterfaceError |
當有數據庫接口模塊本身的錯誤(而不是數據庫的錯誤)發生時觸發。 必須是Error的子類。 |
DatabaseError |
和數據庫有關的錯誤發生時觸發。 必須是Error的子類。 |
DataError |
當有數據處理時的錯誤發生時觸發,例如:除零錯誤,數據超范圍等等。 必須是DatabaseError的子類。 |
OperationalError |
指非用戶控制的,而是操作數據庫時發生的錯誤。例如:連接意外斷開、 數據庫名未找到、事務處理失敗、內存分配錯誤等等操作數據庫是發生的錯誤。 必須是DatabaseError的子類。 |
IntegrityError |
完整性相關的錯誤,例如外鍵檢查失敗等。必須是DatabaseError子類。 |
InternalError |
數據庫的內部錯誤,例如游標(cursor)失效了、事務同步失敗等等。 必須是DatabaseError子類。 |
ProgrammingError |
程序錯誤,例如數據表(table)沒找到或已存在、SQL語句語法錯誤、 參數數量錯誤等等。必須是DatabaseError的子類。 |
NotSupportedError |
不支持錯誤,指使用了數據庫不支持的函數或API等。例如在連接對象上 使用.rollback()函數,然而數據庫並不支持事務或者事務已關閉。 必須是DatabaseError的子類。 |
三、封裝
1 import pymysql 2 3 #封裝數據庫操作 4 class DbMysql: 5 # (host:IP地址;prot:端口號;user:用戶名;passwd:密碼;db:數據庫名稱;charset:編碼方式) 6 def __init__(self,host,user,passwd,db,port=3306): 7 self.host=host 8 self.port=port 9 self.user=user 10 self.passwd=passwd 11 self.db=db 12 # self.charset=charset 13 #連接數據庫 14 def Dbconnect(self): 15 self.DbCon=pymysql.connect(host=self.host,user=self.user,passwd=self.passwd,db=self.db,port=self.port) 16 self.Dbcursor=self.DbCon.cursor(cursor=pymysql.cursors.DictCursor) 17 18 #查詢(select) 19 def Dbselect(self,selectsql): 20 self.Dbconnect() 21 try: 22 selectresult=self.Dbcursor.execute(selectsql) 23 print("查詢成功") 24 except: 25 print('查詢出錯,請排查問題。') 26 self.Dbclose() 27 #查詢返回一條數(fetchone) 28 def Dbfetchone(self): 29 fetchdata=self.Dbcursor.fetchone() 30 return fetchdata 31 32 #查詢返回所有數據(fetchall) 33 def Dbfetchall(self): 34 fetchdata=self.Dbcursor.fetchall() 35 return fetchdata 36 37 #獲取影響的行數 38 def Dbrowcount(self): 39 rowcountdata=self.Dbcursor.rowcount 40 return rowcountdata 41 42 #返回前幾行數據fetchmany 43 def Dbfetchmany(self,num): 44 fetchmanydata=self.Dbcursor.fetchmany(num) 45 return fetchmanydata 46 47 #增加(insert)、修改(update)、刪除(delete),執行一條 48 def Dbobj(self,sql): 49 self.Dbconnect() 50 try: 51 self.Dbcursor.execute(sql) 52 self.DbCon.commit() 53 print('操作成功,請查看數據庫數據。') 54 except: 55 print('操作出錯,請排查問題。') 56 self.DbCon.rollback() 57 self.Dbclose() 58 59 #增加(insert)、修改(update)、刪除(delete),執行多條 60 def Dbobjmany(self,sql): 61 self.Dbconnect() 62 try: 63 self.Dbcursor.executemany(sql) 64 self.DbCon.commit() 65 print('操作成功,請查看數據庫數據。') 66 except: 67 print('操作出錯,請排查問題。') 68 self.DbCon.rollback() 69 self.Dbclose() 70 71 #關閉數據庫 72 def Dbclose(self): 73 self.Dbcursor.close() 74 self.DbCon.close()