1. 程式人生 > >《python核心程式設計》讀書筆記-mysql-connector

《python核心程式設計》讀書筆記-mysql-connector

DB-API

DB-API 是闡明一系列所需物件和資料庫訪問機制的標準,它可以為不同的資料庫介面卡和底層資料庫系統提供一致性的訪問

DB-API模組屬性 描述
apilevel 需要介面卡相容的 DB-API 版本
threadsafety 本模組的執行緒安全級別
paramstyle 本模組的 SQL 語句引數風格
connect() Connect()函式
DB-API異 常類 描 述
InterfaceError 資料庫介面(非資料庫)錯誤
DatabaseError 資料庫錯誤
DataError 處理資料時出現問題
OperationlError 資料庫操作執行期間出現錯誤
IntegrityError 資料庫關係完整性錯誤
InternalError 資料庫內部錯誤
ProgrammingError SQL 命令執行失敗
NotSupportedError 出現不支援的操作

Connection 物件

應用與資料庫之間進行通訊需要建立資料庫連線。它是最基本的機制,只有通過資料庫連線才能把命令傳遞到伺服器,並得到返回的結果。當一個連線(或一個連線池)建立後,可以建立一個遊標,向資料庫傳送請求,然後從資料庫中接收回應。

Connection 物件方法 描述
close () 關閉資料庫連線
commit() 提交當前事務
rollback() 取消當前事務
cursor() 使用該連線建立(並返回)一個遊標或類遊標的物件
errorhandler (cxn, cur, errcls, errval ) 作為給定連線的遊標的處理程式

Cursor 物件

當建立連線後,就可以和資料庫進行通訊了。遊標可以讓使用者提交資料庫命令,並獲得查詢的結果行。 Python DB-API 遊標物件總能提供遊標的功能, 即使是那些不支援遊標的資料庫。此時,如果你建立了一個數據庫介面卡,還必須要實現 cursor 物件,
以扮演類似遊標的角色。這樣,無論你將資料庫系統切換到支援遊標的資料庫還是不支援遊標的資料庫,都能保持 Python 程式碼的一致性。當遊標建立好後,就可以執行查詢或命令(或多個查詢和命令),並從結果集中取回一行或多行結果。

Cursor物件屬性 描 述
arraysize 使用 fetchmany()方法時,一次取出的結果行數,預設為 1
connection 建立此遊標的連線(可選)
description 返回遊標活動狀態(7 項元組):(name, type_code, display_size, internal_ size,precision, scale, null_ok),只有 name 和 type_code 是必需的
lastrowid 上次修改行的行 ID(可選;如果不支援行 ID,則返回 None)
rowcount 上次 execute*()方法處理或影響的行數
callproc( func [,args]) 呼叫儲存過程
close() 關閉遊標
execute (op[,args]) 執行資料庫查詢或命令
executemany (op, args) 類似 execute()和 map()的結合,為給定的所有引數準備並執行資料庫查詢或命令
fetchone() 獲取查詢結果的下一行
fetchmany([size=cursor. arraysize]) 獲取查詢結果的下面 size 行
fetchall() 獲取查詢結果的所有(剩餘)行
__iter__() 為遊標建立迭代器物件(可選,參考 next())
messages 遊標執行後從資料庫中獲得的訊息列表(元組集合,可選)
next () 被迭代器用於獲取查詢結果的下一行(可選,類似 fetchone(),參考__iter__())
nextset() 移動到下一個結果集合(如果支援)
rownumber 當前結果集中游標的索引(以行為單位,從 0 開始,可選)
setinputsizes(sizes) 設定允許的最大輸入大小(必須有,但是實現是可選的)
setoutputsize(size[,col]) 設定大列獲取的最大緩衝區大小(必須有,但是實現是可選的)

mysql-connector

python3建議使用mysql-connector模組

示例

>>>import mysql.connector
>>>cnx = mysql.connector.connect(user='hal',password='9714mm',host='192.168.253.129',database='mydb')
>>>cursor = cnx.cursor()
>>>query = ("show tables")
>>>cursor.execute(query)
>>>for data in cursor.fetchall():
...    print(data)
...   
('Customers',)
('OrderItems',)
('Orders',)
('Products',)
('Productustomers',)
('Vendors',)
('t1',)

一般流程就是用cursor.execute()執行命令,用cursor.fetchall()獲取資料

參考文件: