日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

pymysql操作mysql数据库

發(fā)布時(shí)間:2023/12/20 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pymysql操作mysql数据库 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、pymysql操作mysql數(shù)據(jù)庫

  • 安裝pymysql

    pip install pymysql

1.1 pymysql操作數(shù)據(jù)庫的五行拳

  • 連接數(shù)據(jù)庫

    使用Connect方法連接數(shù)據(jù)庫

    pymysql.Connections.Connection(host=None, user=None, password='', database=None, port=0, charset='') 參數(shù)說明:host – 數(shù)據(jù)庫服務(wù)器所在的主機(jī)。user – 登錄用戶名。password – 登錄用戶密碼。database – 連接的數(shù)據(jù)庫。port – 數(shù)據(jù)庫開放的端口。(默認(rèn): 3306)charset – 連接字符集。 返回值:返回連接對象例子: link = pymysql.Connect(host='localhost', port=3306, user='root', password='123456', db='zzl', charset='utf8') ?
    • 連接對象方法

    方法說明
    begin()開啟事務(wù)
    commit()提交事務(wù)
    cursor(cursor=None)創(chuàng)建一個(gè)游標(biāo)用來執(zhí)行sql語句
    rollback()回滾事務(wù)
    close()關(guān)閉連接
    select_db(db)選擇數(shù)據(jù)庫
    set_charset(charset)設(shè)置字符集
  • 創(chuàng)建游標(biāo)

    cursor = link.cursor() ? cursor=pymysql.Cursors.DictCursor() #[{}] print(cursor.rowcount) #打印受影響行數(shù) 方法說明
    close()關(guān)閉游標(biāo)
    execute(query, args=None)執(zhí)行單條語句,傳入需要執(zhí)行的語句,是string類型;同時(shí)可以給查詢傳入?yún)?shù),參數(shù)可以是tuple、list或dict。執(zhí)行完成后,會返回執(zhí)行語句的影響行數(shù)。
    fetchone()取一條數(shù)據(jù)
    fetchmany(n)取多條數(shù)據(jù)
    fetchall()取所有數(shù)據(jù)
    _executed屬性正在執(zhí)行的sql語句
  • 執(zhí)行sql語句

    # 執(zhí)行sql語句 sql = 'select * from user1' # 執(zhí)行完sql語句,返回受影響的行數(shù) num = cursor.execute(sql)
  • 獲取結(jié)果集

    result1 = cursor.fetchone() print(result1)
  • 關(guān)閉連接

    cursor.close() link.close()
  • 1.2 pymysql中事務(wù)處理

    pymysql默認(rèn)是沒有開啟自動(dòng)提交事務(wù),所以我們?nèi)绻M(jìn)行增、刪、改,就必須手動(dòng)提交或回滾事務(wù)。

    sql = 'delete from user where id=%s' % user_id ? # 如果要執(zhí)行增刪改語句的時(shí)候,下面的就是固定格式 try:cursor.execute(sql)# 如果全部執(zhí)行成功,提交事務(wù)link.commit()print(cursor.lastrowid) #獲取最后插入記錄的自增id號 except Exception as e:print(e)link.rollback() ?

    1.3 防sql注入

    • pymysql.escape_string(str) 轉(zhuǎn)移字符串中特殊字符(‘,“等)

    • cursor.execute(sql,參數(shù)),參數(shù)化,不要直接拼接sql字符串

    二、封裝數(shù)據(jù)庫操作類

    2.1.數(shù)據(jù)庫操作類的封裝

    • 一個(gè)數(shù)據(jù)庫model類對應(yīng)一個(gè)表

    • 數(shù)據(jù)庫model類的核心是連貫操作和方法的無順序調(diào)用

      db.where('username="admin"').table('blog_user').field('username,password').select() # select usenrame,password from blog_user where username='admin' # sql = "SELECT {fields} FROM {table} {where} {groupby} {having} {orderby} {limit}".format()

    2.2 連貫操作

    方法要返回self

    2.3 方法的無順序調(diào)用

    • 在進(jìn)行數(shù)據(jù)庫查詢時(shí),不用考慮方法的先后順序。

    • 核心思想

      • 無論怎么調(diào)用,最終生成sql語句。

      • 每調(diào)用一個(gè)方法,就生成對應(yīng)sql子句

      • 涉及到的技術(shù)點(diǎn):字符串拼接

      • 每次調(diào)用的最后必定是select、insert、update、delete,這些方法不返回self

    2.4 字段緩存

    • 在查詢語句中盡量不要出現(xiàn)*,我們可以將表的字段緩存的文件中,實(shí)例化數(shù)據(jù)庫model類時(shí),加載緩存字段,如果不指定字段就使用緩存字段

    • 也可以通過緩存字段過濾增刪改時(shí)無效的字段

    三、分頁類

    分頁是通過解析url中page參數(shù)(可以自己指定),結(jié)合sql語句中l(wèi)imit子句,從數(shù)據(jù)庫中查詢每個(gè)頁面所需數(shù)據(jù),具體可以分為以下步驟:

    • 1) 獲取總記錄數(shù)

    • 2)獲取每頁顯示的記錄個(gè)數(shù)

    • 3)計(jì)算總頁數(shù):總記錄數(shù)/每頁記錄個(gè)數(shù),然后上取整

    • 4)解析url獲取當(dāng)前頁數(shù)

    • 5)計(jì)算limit子句所需的偏移量: limit (當(dāng)前頁數(shù)-1)*每頁記錄個(gè)數(shù),每頁記錄個(gè)數(shù)

    總結(jié)

    以上是生活随笔為你收集整理的pymysql操作mysql数据库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。