python模塊:pymysql學(xué)習(xí)

pymysql是python中操作mysql數(shù)據(jù)庫的一個(gè)優(yōu)秀的模塊,使用起來也是非常的簡單和方便,只用記住幾個(gè)下面標(biāo)注紅色的部分的用法就ok了。

從數(shù)據(jù)庫的增刪改查操作來學(xué)習(xí)pymysql:

import pymysql
# 導(dǎo)入模塊
conn = pymysql.connect(host='localhost',user='root',password='root',port=3306,database='stupy',charset='utf8')

上面的代碼是連接數(shù)據(jù)庫,眼熟就對(duì)了,基本都是一個(gè)套路,有個(gè)地方需要說明下的是,后面的字符集,前幾天在抓某寶商品評(píng)論的時(shí)候就遇到一個(gè)問題,評(píng)論內(nèi)容里面包含了emoji,用上面的代碼連接數(shù)據(jù)庫執(zhí)行入庫操作的時(shí)候報(bào)錯(cuò)了:

Incorrect string value: '\xF0\x9F\x98\x84'

一臉懵啊有沒有,查了下才發(fā)現(xiàn)是emoji表情的問題,解決的方法也很簡單,將連接數(shù)據(jù)庫的字符集改成utf8mb4,且數(shù)據(jù)庫、表、字段都需要修改為utf8mb4字符集,重要!??!

發(fā)生這個(gè)錯(cuò)誤的原因是常見字符串占位3個(gè)字節(jié),而emoji表情符號(hào)占用4個(gè)字節(jié),utf8就不好使了,所以就得用utf8mb4字符集。

下面來根據(jù)指定條件來查詢數(shù)據(jù)庫(數(shù)據(jù)表文件獲取口令0514):

with conn.cursor() as cursor:
#     with代碼管理器,可以省掉cursor.close和conn.close
    sql = 'select id,title,area1,huxing,price from fang where area1=%s'
    cursor.execute(sql,['武昌'])
#     還有執(zhí)行多條sql和查詢條件參數(shù)的,在后面進(jìn)階偏中來寫
#     rows = cursor.fetchall()
    print('取一條:',cursor.fetchone())
    print('獲取10條記錄:',cursor.fetchmany(10))
    print('取一條:',cursor.fetchone())
    
    
#     print(cursor.scroll(1, mode='absolute'))
# 指針按照絕對(duì)位置移動(dòng)1
#     print(cursor.scroll(1, mode='relative'))
# 指針按照相對(duì)位置移動(dòng)1(相對(duì)當(dāng)前位置)
# 這個(gè)地方的fetchall()獲取所有記錄,還可以有fetchone獲取一條記錄的,返回記錄數(shù)

仔細(xì)測試下這里的三個(gè)獲取查詢結(jié)果的方法

fetchone:獲取一條記錄

fetchmany:獲取指定條數(shù)記錄

fetchall:獲取所有記錄

上面代碼中,打印出來的結(jié)果是按照代碼執(zhí)行順序來獲取數(shù)據(jù)的,就是說,在調(diào)用fetchone的時(shí)候,指針會(huì)移動(dòng)到下個(gè)位置。

增加單條記錄:

with conn.cursor() as cursor:
    
    sql1 = 'insert into spy(title,author,url,dt,ly) values(%s,%s,%s,%s,%s)'
    # values里面有兩種寫法,一種是直接用%s占位符(沒有%d),一種是帶字段名%(name)s
    row = cursor.execute(sql1,['test5','e','www.baidu.com','2019','loacl'])
# 批量插入多條數(shù)據(jù),values用列表
    conn.commit()
# 涉及修改數(shù)據(jù)庫操作的,需要用commit提交事務(wù)
    print(row)
    print(cursor.lastrowid)

增加多條記錄:

with conn.cursor() as cursor:
    
    sql1 = 'insert into spy(title,author,url,dt,ly) values(%s,%s,%s,%s,%s)'
    
    data = [
        ('test1','a','www.baidu.com','2019','loacl'),
         ('test2','b','www.baidu.com','2019','loacl'),
         ('test3','c','www.baidu.com','2019','loacl')
    ]

    row = cursor.executemany(sql1,data)
# 批量插入多條數(shù)據(jù),values用列表
    conn.commit()
# 涉及修改數(shù)據(jù)庫操作的,需要用commit提交事務(wù)
    print(row)

單條記錄和多條記錄的區(qū)別主要一個(gè)是execute,一個(gè)是executemany

刪除操作:

with conn.cursor() as cursor:
    
    sql1 = 'delete from spy where author=%s'
    row = cursor.execute(sql1,['e'])
    conn.commit()
    print(row)
    # 打印結(jié)果是影響的記錄數(shù)

修改操作:

with conn.cursor() as cursor:
    
    sql1 = 'update spy set author=%s where ly=%s'
    row = cursor.execute(sql1,['gary.w','loacl'])
    conn.commit()
    print(row)
    # 打印結(jié)果是影響的記錄數(shù)

數(shù)據(jù)回滾:

cursor = conn.cursor()
sql1 = 'insert into spy(title,author,url,dt,ly) values(%s,%s,%s,%s,%s)'
sql2 = 'insert into spy(id,title,author,url,ly) values(%s,%s,%s,%s,%s)'

try:
    cursor.execute(sql1,['test6','匿名','www.vxinhao.com','2019','loacl'])
    cursor.execute(sql2,['這里應(yīng)該對(duì)應(yīng)的是int的id','錯(cuò)誤數(shù)據(jù)','www.baidu.com','2019','loacl'])
    conn.commit()
except Exception as e:
    print(str(e))
    conn.rollback()
#     出現(xiàn)異常,執(zhí)行回滾
finally:
    cursor.close()
    conn.close()
    
# 執(zhí)行回滾后,數(shù)據(jù)不會(huì)被添加

這里做了個(gè)異常處理,看下異常處理的用法(模板):

try:
這里放執(zhí)行數(shù)據(jù)庫操作的代碼塊
except:
當(dāng)上面的代碼出現(xiàn)異常的時(shí)候執(zhí)行的代碼,這里用了rollback()方法
finally:
這里是一定會(huì)執(zhí)行的代碼,哪怕是前面出現(xiàn)錯(cuò)誤

只要sql語句不會(huì)有什么問題,本文到這里,基本就夠用了(節(jié)約時(shí)間)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ORA-00001: 違反唯一約束條件 (.) 錯(cuò)誤說明:當(dāng)在唯一索引所對(duì)應(yīng)的列上鍵入重復(fù)值時(shí),會(huì)觸發(fā)此異常。 O...
    我想起個(gè)好名字閱讀 5,974評(píng)論 0 9
  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡介】: Python 是一個(gè)...
    _小老虎_閱讀 6,338評(píng)論 0 10
  • 本文主要總結(jié)了工作中一些常用的操作及不合理的操作,在對(duì)慢查詢進(jìn)行優(yōu)化時(shí)收集的一些有用的資料和信息,本文適合有MyS...
    Chting閱讀 686評(píng)論 0 1
  • 秋雨瀟瀟漸轉(zhuǎn)涼,微風(fēng)過處帶余香。 天生就是清髙物,哪怕污泥淤滿塘。
    秋池HD閱讀 1,374評(píng)論 4 8
  • 經(jīng)過幾天的休息,身體終于恢復(fù)如初。朝陽從東方冉冉升起,我也奮力的行走在前往西藏的路上。從巴塘出來,路途平坦,山的...
    南柯420閱讀 731評(píng)論 -1 6

友情鏈接更多精彩內(nèi)容