一、簡介
MySQL是最流行的關系型數據庫管理系統,在這里我使用 連接數據庫,并實現簡單的增刪改查。
是在 .x版本中用于連接 MySQL服務器的一個庫,中則使用 。
遵循 數據庫 API v2.0規范,并包含了 pure- MySQL客戶端庫。
我們可以使用 pip來安裝:pip
測試 是否安裝成功: 如果沒有產生錯誤,表明安裝成功。
二、基本的增刪改查操作
1.創建數據庫
#創建數據庫的連接
db = .(host='',user='root',='')
print(db)
#創建游標對象
cur = db.()
#使用()創建數據庫
cur.(' ')
2.連接數據庫
#打開數據庫的連接
db = .(host='',user='root',='',='')
#創建游標對象
cur = db.()
#設置查詢語句
sql = ' ()'
#使用()執行SQL語句查詢
cur.(sql)
#使用()方法獲取單條數據
data = cur.()
print(' :', data)#結果 : ('8.0.31',)
#關閉數據庫
db.close()
3.創建數據庫表
#打開數據庫的連接
db = .(host='',user='root',='',='')
#創建游標對象
cur = db.()
#設置查詢數據庫表是否存在語句
sql1 = 'drop table if test'
#使用()執行sql1語句查詢
cur.(sql1)
#設置創建數據庫表的語句
sql2 = """
table test(
name char(20) not null,
user char(20),
age int,
sex char(1),
float)
"""
#使用()執行sql2語句創建數據庫表
cur.(sql2)
#關閉數據庫
db.close()
4.數據庫插入數據
#打開數據庫的連接
db = .(host='',user='root',='',='')
#創建游標對象
cur = db.()
#設置插入數據庫數據語句
sql = """ INTO test(name,
user, age, sex, )
('Jim', '', 30, 'M', 2030)"""
#sql插入語句也可以寫成如下格式
#sql = " INTO test(name, \
# user, age, sex, ) \
# ('%s', '%s', %s, '%s', %s)" % \
# ('Jim', '', 30, 'M', 2030)
try:
#使用()執行sql1語句
cur.(sql)
#提交數據到數據庫執行
mit()
:
#如果發生錯誤則回滾
db.()
print(11)
#關閉數據庫
db.close()
5.數據庫數據查詢
查詢Mysql使用 ()方法獲取單條數據, 使用()方法獲取多條數據。
(): 該方法獲取下一個查詢結果集。結果集是一個對象
(): 接收全部的返回結果行.
: 這是一個只讀屬性,并返回執行()方法后影響的行數。
#打開數據庫的連接
db = .(host='',user='root',='',='')
#創建游標對象
cur = db.()
#設置查詢數據庫數據語句
sql = " * FROM test WHERE > %s" % (1000)
try:
#使用()執行sql1語句
cur.(sql)
#獲取單條記錄
#res = cur.()
#print(res)
#獲取所有記錄列表
= cur.()
for row in :
print('name:',row[0],'user:',row[1],'age:',row[2],'sex:',row[3],':',row[4])
#提交數據到數據庫執行
mit()
:
#如果發生錯誤
print('Error: to fetch data')
#關閉數據庫
db.close()
6.數據庫數據更新
#打開數據庫的連接
db = .(host='',user='root',='',='')
#創建游標對象
cur = db.()
#設置更新數據庫數據語句
sql = " test SET age = age + 1 WHERE sex = '%c'" % ('M')
try:
#使用()執行sql1語句
cur.(sql)
#提交數據到數據庫執行
mit()
:
#發生錯誤時回滾
db.()
#關閉數據庫
db.close()
7.數據庫數據刪除
#打開數據庫的連接
db = .(host='',user='root',='',='')
#創建游標對象
cur = db.()
# SQL 刪除語句
sql = " FROM test WHERE age > %s" % (30)
try:
#使用()執行sql1語句
cur.(sql)
#提交數據到數據庫執行
mit()
:
#發生錯誤時回滾
db.()
#關閉數據庫
db.close()
8.數據庫數據排序
#打開數據庫的連接
db = .(host='',user='root',='',='')
#創建游標對象
cur = db.()
#sql排序語句
sql = " * FROM test ORDER BY age"
try:
#使用()執行sql1語句
cur.(sql)
#獲取所有記錄列表
= cur.()
for row in :
print('name:',row[0],'user:',row[1],'age:',row[2],'sex:',row[3],':',row[4])
#提交數據到數據庫執行
mit()
:
#發生錯誤時回滾
db.()
#關閉數據庫
db.close()
9.數據庫查詢限制顯示記錄數
#打開數據庫的連接
db = .(host='',user='root',='',='')
#創建游標對象
cur = db.()
#sql查詢指定條數的語句
sql = " * FROM test limit 3"
try:
#使用()執行sql1語句
cur.(sql)
#獲取所有記錄列表
= cur.()
for row in :
print('name:',row[0],'user:',row[1],'age:',row[2],'sex:',row[3],':',row[4])
#提交數據到數據庫執行
mit()
:
#發生錯誤時回滾
db.()
#關閉數據庫
db.close()
三、執行事務
事務機制可以確保數據一致性。
事務應該具有4個屬性:原子性、一致性、隔離性、持久性。這四個屬性通常稱為ACID特性。
原子性():一個事務是一個不可分割的工作單位,事務中包括的諸操作要么都做,要么都不做。
一致性():事務必須是使數據庫從一個一致性狀態變到另一個一致性狀態。一致性與原子性是密切相關的。
隔離性():一個事務的執行不能被其他事務干擾。即一個事務內部的操作及使用的數據對并發的其他事務是隔離的,并發執行的各個事務之間不能互相干擾。
持久性():持續性也稱永久性()使用access創建數據庫,指一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。接下來的其他操作或故障不應該對其有任何影響。
DB API 2.0的事務提供了兩個方法 或 。
對于支持事務的數據庫, 在數據庫編程中,當游標建立之時,就自動開始了一個隱形的數據庫事務。
提交操作:向數據庫發出綠色信號以完成更改,并且在此操作之后,無法恢復任何更改。使用()方法來實現。
回滾操作:如果您對一項或多項更改不滿意,并且希望完全還原這些更改,請使用()方法。
()方法回滾當前游標的所有操作。每一個方法都開始了一個新的事務。
斷開數據庫:要斷開數據庫連接,使用 close()方法。
四、錯誤處理
DB API中定義了一些數據庫操作的錯誤及異常:
當有嚴重警告時觸發,例如插入數據是被截斷等等。必須是 的子類。
Error 警告以外所有其他錯誤類。必須是 的子類。
當有數據庫接口模塊本身的錯誤(而不是數據庫的錯誤)發生時觸發。 必須是Error的子類。
和數據庫有關的錯誤發生時觸發。 必須是Error的子類。
當有數據處理時的錯誤發生時觸發使用access創建數據庫,例如:除零錯誤,數據超范圍等等。 必須是的子類。
指非用戶控制的,而是操作數據庫時發生的錯誤。例如:連接意外斷開、 數據庫名未找到、事務處理失敗、內存分配錯誤等等操作數據庫是發生的錯誤。 必須是的子類。
完整性相關的錯誤,例如外鍵檢查失敗等。必須是子類。
數據庫的內部錯誤,例如游標()失效了、事務同步失敗等等。 必須是子類。
程序錯誤,例如數據表(table)沒找到或已存在、SQL語句語法錯誤、 參數數量錯誤等等。必須是的子類。
不支持錯誤,指使用了數據庫不支持的函數或API等。例如在連接對象上 使用.()函數,然而數據庫并不支持事務或者事務已關閉。 必須是的子類。