欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談Python訪問MySQL的正確姿勢

 更新時間:2020年01月07日 14:06:22   作者:天元浪子  
這篇文章主要介紹了淺談Python訪問MySQL的正確姿勢,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

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

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

PyMySQL mysqlclient
安裝方式 pip install PyMySQL pip install mysqlclient
導(dǎo)入方式 import pymysql import MySQLdb
Python版本 2.7 and >= 3.4 2.7 and >= 3.4
數(shù)據(jù)庫版本 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。這意味著,我們不用修改代碼,就可以更換數(shù)據(jù)庫客戶端。下面的應(yīng)用實例證明了這一點:除了模塊名字不一樣,其余代碼完全一致。

姿勢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:以字典形式返回查詢記錄

查詢結(jié)果以元組形式返回,有很多不便,我們需要知道元組各元素對應(yīng)的是表結(jié)構(gòu)中的哪一個字段(列)。下面的代碼,實現(xiàn)了以字典形式返回查詢記錄。同樣的,如果把代碼中的 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')},)

姿勢3:事務(wù)回滾

事務(wù)是關(guān)系型數(shù)據(jù)庫的重要特性,NoSQL數(shù)據(jù)庫、分布式數(shù)據(jù)庫通常會淡化、甚至放棄事務(wù)。所謂事務(wù)是將一組DML(insert、update、delete)語句組合在一起形成一個邏輯單元,這些操作要么全部執(zhí)行成功提交(commit),如果不成功就要回退到事務(wù)開始之前的狀態(tài)(rollback),以確保不會停留在錯誤的中間狀態(tài)。下面的代碼演示了 MySQL 典型的事務(wù)回滾應(yīng)用。

>>> import pymysql
>>> db = pymysql.connect(
  host = 'localhost',
  user = 'xufive',
  password = '********',
  db = 'demo',
  charset = 'utf8'
)

def transaction(db):
  try:
    db.begin()
    # 此處加入出錯之后需要回滾的DML(insert、update、delete)語句
    db.commit()
    return True
  except:
    db.rollback()
    return False  

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python爬蟲利用多線程爬取 LOL 高清壁紙

    Python爬蟲利用多線程爬取 LOL 高清壁紙

    這篇文章主要介紹了Python爬蟲利用多線程爬取 LOL 高清壁紙,通過網(wǎng)站爬取每一個英雄的所有皮膚圖片,全部下載下來并保存到本地,下文爬取過程感興趣的朋友可以參考一下
    2022-06-06
  • python使用BeautifulSoup與正則表達式爬取時光網(wǎng)不同地區(qū)top100電影并對比

    python使用BeautifulSoup與正則表達式爬取時光網(wǎng)不同地區(qū)top100電影并對比

    這篇文章主要給大家介紹了關(guān)于python使用BeautifulSoup與正則表達式爬取時光網(wǎng)不同地區(qū)top100電影并對比的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用python具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-04-04
  • 如何在VSCode下使用Jupyter的教程詳解

    如何在VSCode下使用Jupyter的教程詳解

    這篇文章主要介紹了如何在VSCode下使用Jupyter,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • Python爬取數(shù)據(jù)并實現(xiàn)可視化代碼解析

    Python爬取數(shù)據(jù)并實現(xiàn)可視化代碼解析

    這篇文章主要介紹了Python爬取數(shù)據(jù)并實現(xiàn)可視化代碼解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • python實現(xiàn)數(shù)通設(shè)備端口監(jiān)控示例

    python實現(xiàn)數(shù)通設(shè)備端口監(jiān)控示例

    這篇文章主要介紹了python實現(xiàn)數(shù)通設(shè)備端口監(jiān)控示例,需要的朋友可以參考下
    2014-04-04
  • python破解WiFi教程代碼,Python蹭網(wǎng)原理講解

    python破解WiFi教程代碼,Python蹭網(wǎng)原理講解

    用Python生成一個簡單的密碼本,一般是有數(shù)字、字母和符號組成,這里用到的思路主要是窮舉法。通過使用pywifi?模塊,根據(jù)密碼本暴力破解WiFi。本文只是從技術(shù)的角度來闡述學習Pywifi庫!并不建議大家做任何破壞性的操作和任何不當?shù)男袨椋?/div> 2023-01-01
  • Python Django ORM與模型詳解

    Python Django ORM與模型詳解

    這篇文章主要介紹了django的ORM與模型的實現(xiàn)原理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧v
    2021-11-11
  • Python利用機器學習算法實現(xiàn)垃圾郵件的識別

    Python利用機器學習算法實現(xiàn)垃圾郵件的識別

    今天教大家利用簡單的機器學習算法實現(xiàn)垃圾郵件識別,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Django 路由層URLconf的實現(xiàn)

    Django 路由層URLconf的實現(xiàn)

    這篇文章主要介紹了Django 路由層URLconf的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • 基于Python制作天眼查小程序的示例代碼

    基于Python制作天眼查小程序的示例代碼

    本文主要介紹了如何利用Python制作一個天眼查GUI程序。這次的GUI程序,我們使用的框架是PyQt5,該框架擁有比tkinter更為豐富的內(nèi)置組件,在界面美化方面,貌似也更勝一籌,快跟隨小編一起學起來吧
    2022-09-09

最新評論