pymysql資料庫開發介紹

2021-09-30 01:44:13 字數 4663 閱讀 5482

封裝好mysql協議的包,習慣上稱為驅動程式;與mysql通訊就是典型的cs模式,server就是伺服器端,使用客戶端先建立連線,資料庫程式設計時,這個客戶端變成了程式。無論是任何乙個封裝好mysql協議的包都是基於tcp協議之上開發,傳輸的資料必須遵循mysql的協議。

mysqldb是最有名的庫,對mysql的c client封裝實現,支援python 2,現在不更新了,所以不支援python3

mysqlclient在mysqldb的基礎上,增加了對python 3的支援;安裝的時候使用pip install mysqlclient進行安裝,使用的時候還使用import mysqldb進行匯入使用。

pymysql是語法相容mysqldb,使用純python寫的mysql客戶端庫,支援python 3,在cpython 2.7 、3.4+之後才可以使用,並且要求mysql版本是mysql 5.5+、mariadb 5.5+

pip install pymysql

# conn.json檔案中:

import pymysql

import ******json

conf = ******json.load(

open

('conn.json'))

print

(conf)

conn =

none

try:

conn = pymysql.connect(

**conf)

print

(type

(conn)

, conn)

conn.ping(

false

)# ping不同通異常,true重連

finally

:if conn:

conn.close(

)

運算元據庫,必須使用游標,需要先獲取乙個游標物件;connection.cursor(cursor=none)方法返回乙個新的游標物件。

連線沒有關閉前,游標物件可以反覆使用。

cursor引數,可以指定乙個cursor類。如果為none,則使用預設cursor類,cursor類的例項,可以使用execute()方法執行sql語句,成功返回影響的行數

建立連線

獲取游標

執行sql

提交事務

釋放資源

import pymysql

from pymysql.cursors import dictcursor

conn = pymysql.connect(host=

'192.168.116.66'

, user=

'root'

, password=

'dmneil11'

, database=

'test'

, port=

3306

, cursorclass=dictcursor)

# port可以省略

# pymysql.connect跟進去看原始碼發現是connection類,進行例項化的時候引數有乙個cursorclass=cursor,預設是cursor類的例項,我們可以修改這個引數,

# 可以修改為dictcursor,這個類的簽名是 class dictcursor(dictcursormixin, cursor), 這個dictcursor返回的是乙個字典,返回一行,是乙個字典。

# 返回多行,放在列表中,元素是字典,代表一行。

# 同時還有個引數是autocommit: autocommit mode. none means use server default. (default: false),相當於set aotocommit=0

# 同時connection類的例項有繫結方法__enter__和__exit__,所以可以使用上下文,但是這裡的上下文不是像檔案,socket那樣用來關閉資源的

# 這裡的__enter__返回乙個cursor類例項,__exit__不是關閉這個connection例項釋放資源,而是用來提交這次事務,如果有錯誤就rollback,沒有

# 錯誤就commit

# cursor例項也支援上下文,這裡就很正常了,在__enter__中返回自身,__exit__中關閉這個cursor資源。

# cursor例項在執行了execute方法之後可以使用cursor類獲取查詢結果集的方法,有fetchone(), fetchmany(size=none),fetchall()方法,

# 同時還有rownumber屬性返回當前行號,其實就是修改游標指標的位置,可以修改這個屬性,並且可以修改為負數,還有rowcount屬性,這個屬性返回返回的總行數

with conn as cursor:

# conn的__enter__返回的是當前設定的cursor類的例項

with cursor:

# cursor類的__enter__返回的是自身

result = cursor.execute(

"select * from employees"

)print

(result)

# 受影響的行數

print(1

, cursor.fetchone())

# 拿到一行,此時指標已經指到第二個位置了

print(2

, cursor.fetchmany(4)

)# 從指標指的第二個位置開始拿三個,拿完之後指標向後指4個

print(3

, cursor.fetchall())

# 從當前指標位置一直讀取到全部,讀完之後指標指到末尾

print(4

, cursor.fetchall())

# 此時已經拿不到東西了

cursor.rownumber =

1print(5

, cursor.fetchone())

# 重新調整指標的位置,再拿乙個,又能拿到了

# 注意fetch操作的是結果集,結果集是已經查詢之後儲存在客戶端裡了。

print(6

,'結果集的行數'

, cursor.rowcount)

# 結果集的行數

# cursor的__exit__會關閉,不用管了

# conn的__exit__只會提交或回滾,不會關閉,所以要手動關一次

conn.close(

)

pymysql.connect跟進去看原始碼發現是connection類,進行例項化的時候引數有乙個cursorclass=cursor,預設是cursor類的例項,我們可以修改這個引數,可以修改為dictcursor,這個類的簽名是class dictcursor(dictcursormixin, cursor), 這個dictcursor返回的是乙個字典,返回一行,是乙個字典。

同時還有個引數是autocommit: autocommit mode. none means use server default. (default: false),相當於set aotocommit=0

同時connection類的例項有繫結方法__enter____exit__,所以可以使用上下文,但是這裡的上下文不是像檔案,socket那樣用來關閉資源的這裡的__enter__返回乙個cursor類例項,__exit__不是關閉這個connection例項釋放資源,而是用來提交這次事務,如果有錯誤就rollback,沒有錯誤就commit

cursor例項也支援上下文,這裡就很正常了,在__enter__中返回自身,__exit__中關閉這個cursor資源。

cursor例項在執行了execute方法之後可以使用cursor類獲取查詢結果集的方法,有fetchone(), fetchmany(size=none),fetchall()方法,同時還有rownumber屬性返回當前行號,其實就是修改游標指標的位置,可以修改這個屬性,並且可以修改為負數,還有rowcount屬性,這個屬性返回返回的總行數。

pip install mysqlclient命令安裝的mysqldbpymysql的使用方法基本一致,但是mysqldbconnect例項不支援上下文。

pymysql 資料庫操作

參考文件 import pymysql dbparams conn pymysql.connect dbparams cursor conn.cursor sql select sname,sclass from student try cursor.execute sql 獲取查詢結果 data ...

pymysql連線資料庫

建立資料庫 import pymysql 開啟資料庫連線 db pymysql.connect localhost testuser test123 testdb 使用 cursor 方法建立乙個游標物件 cursor cursor db.cursor 使用 execute 方法執行 sql,如果表...

Python 資料庫 之 pymysql

資料庫連線物件的使用 import pymysql 1.建立連線物件 語法 連線物件 pymysql.connect host 連線位址 localhost,ip 位址 port 埠號,預設3306,user 使用者名稱 password 密碼 database 資料庫名 charset utf8 ...