国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

淺談Python訪問MySQL的正確姿勢

2024-07-24 12:41:47
字體:
來源:轉載
供稿:網友

Py2 時代,訪問 MySQL 數據庫的模塊除了 PyMySQL 和 MySQL-python 之外,還有以速度見長的 Umysql,以及非常小眾的 Oursql 模塊。進入了 Py3 時代之后,PyMySQL 與時俱進,順利升級到 Py3 版本, MySQL-python 則被它的一個 Py3 分支――mysqlclient 取代,而 Umysql 和 Oursql 則停留在了屬于它們的那個時代。

下表給出了 PyMySQL 模塊和 mysqlclient 模塊在安裝方式、導入方式、支持的Python版本和數據庫版本等方面的比較。因為缺少可信的資料,這里沒有對兩個模塊的性能做出比較。不過,PyMySQL 明確聲明支持最新的 MySQL 和 MariaDB,而 mysqlclient 關于數據庫版本支持的描述顯得模棱兩可、似是而非,所以很多人也許會把 PyMySQL 作為首選。但從我們的實際應用來看,mysqlclient 并沒有受到過數據庫版本的限制。我更愿意把版本支持的表述解讀為兩個開發團隊風格不同所致。

PyMySQL mysqlclient
安裝方式 pip install PyMySQL pip install mysqlclient
導入方式 import pymysql import MySQLdb
Python版本 2.7 and >= 3.4 2.7 and >= 3.4
數據庫版本 MySQL >= 5.5
MariaDB >= 5.5
MySQL versions from 3.23 to 5.5;
5.0 or newer recommended.
MariaDB should also work.

有趣的是,不管是 PyMySQL,還是 MySQL-python,或者后來取而代之的 mysqlclient,它們在用法上幾乎完全一致:都是基于 Python database API version 2.0,這個標準也被稱作 PEP-0249。這意味著,我們不用修改代碼,就可以更換數據庫客戶端。下面的應用實例證明了這一點:除了模塊名字不一樣,其余代碼完全一致。

姿勢1:以元組形式返回查詢記錄

我們以 PyMySQL 模塊為例,先來看看最常見的用法:以元組形式返回查詢記錄。如果把代碼中的 pymysql 改為 MySQLdb,可以輕松切換成 mysqlclient 模塊。

>>> import pymysql>>> db = pymysql.connect(  host = 'localhost',  user = 'xufive',  password = '********',  db = 'demo',  charset = 'utf8')>>> cursor = db.cursor()>>> cursor.execute('select * from member where id = %s', (100,))1>>> print(cursor.fetchall())((100, '370103********0012', '*9EE8E3304D69C3E9260F19C224EA5852129BF030', '王茁洋', '男', datetime.date(****, **, **), '', '濟南', '濟南泉景小學', '186********', Decimal('1812.50')),)>>> cursor.close()>>> db.close()

姿勢2:以字典形式返回查詢記錄

查詢結果以元組形式返回,有很多不便,我們需要知道元組各元素對應的是表結構中的哪一個字段(列)。下面的代碼,實現了以字典形式返回查詢記錄。同樣的,如果把代碼中的 MySQLdb 改為 pymysql,可以輕松切換成 PyMySQL 模塊。

>>> import MySQLdb.cursors>>> db = MySQLdb.connect(  host = 'localhost',  user = 'xufive',  password = '********',  db = 'demo',   charset = 'utf8',  cursorclass = MySQLdb.cursors.DictCursor)>>> with db.cursor() as cursor:  sql = 'select * from member where id = %s'  cursor.execute(sql, (100,))  print(cursor.fetchall()) 1({'id': 100, 'idcard': '370103********0012', 'passwd': '*9EE8E3304D69C3E9260F19C224EA5852129BF030', 'name': '王茁洋', 'sex': '男', 'birthday': datetime.date(****, **, **), 'title': '', 'address': '濟南', 'club': '濟南泉景小學', 'phone': '186********', 'rating': Decimal('1812.50')},)
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 康定县| 丹阳市| 临汾市| 峡江县| 乌拉特后旗| 离岛区| 西城区| 昌黎县| 吉隆县| 陈巴尔虎旗| 邮箱| 麻栗坡县| 石楼县| 育儿| 六盘水市| 四会市| 吉水县| 富源县| 瑞金市| 苗栗市| 安溪县| 元阳县| 达拉特旗| 日土县| 衢州市| 广平县| 郯城县| 松潘县| 鄯善县| 邵武市| 肇庆市| 新乡市| 桑日县| 沂水县| 乌兰察布市| 龙海市| 布拖县| 淮南市| 阆中市| 武乡县| 淮阳县|