首頁 > 軟體

python資料庫操作指南之PyMysql使用詳解

2023-03-02 18:01:03

PyMysql使用詳解

在編寫小指令碼時,PyMysql是快速連線並運算元據庫的一個不錯選擇。

安裝

pip3 install PyMysql
# 可使用 pip list 檢視此環境安裝了哪些第三方庫    pip list | grep PyMysql

使用

import pymysql

連線資料庫

使用connect函數建立連線物件,此連線物件提供關閉資料庫、事務回滾等操作

一般傳參為:host, user, password, port(預設為3306), database(想要連線的資料庫名)

db = pymysql.connect(host='127.0.0.1',
                     user='root',
                     password='pwd',
                     database='database_name')

連線物件的常見方法

方法名說明
cursor()獲取遊標物件,運算元據庫,如執行DML操作,呼叫儲存過程等
commit()提交事務
rollback()回滾事務
close()關閉資料庫連線

運算元據庫

運算元據庫主要使用cursor遊標物件,對資料庫進行操作

cursor遊標物件的常見方法

方法名說明
close()關閉當前遊標物件
execute(query)執行資料庫操作,如sql語句或資料庫命令
executemany(query,params)用於批次操作,如:批次更新
fetchone()獲取查詢結果集中的下一條記錄
fetchmany(size)獲取查詢結果集中指定數量的記錄,size預設為1
fetchall()獲取查詢結果集中所有記錄
nextset()跳至下一個可用的結果集

fetchone(),fetchmany(size),fetchall() 三者的返回值都是元組 或 元組的巢狀 查

查詢主要獲取結果集,注意fetchone 得到的是元組, fetchmany(size),fetchall()得到的是元組的巢狀

注意:

如果既要使用python的字串解析%,sql語句中又包含sql的模糊查詢預留位置%, 模糊查詢使用%%即可,這樣不會報錯

import pymysql

# 建立資料庫連線物件
db = pymysql.connect(host='127.0.0.1',
                     user='root',
                     password='pwd',
                     database='database_name')
# 建立遊標物件
cursor = db.cursor()

table_name = 'map_point'
sql = "SELECT * FROM %s WHERE username LIKE 'DL%%' " % table_name
try:
    cursor.execute(sql)  # 執行sql語句,也可執行資料庫命令,如:show tables
    result = cursor.fetchall()  # 所有結果
    print(result)
except Exception as e:
    db.rollback()
    print("查詢失敗")
    print(e)
finally:
    cursor.close()  # 關閉當前遊標
    db.close()  # 關閉資料庫連線

迴圈查詢:

在一些場景中,需要進行迴圈查詢,判斷,此時在執行完execute查詢語句後,務必進行commit提交,否則每次查詢到的資料都是之前查詢結果的快照,也就是舊資料。

或者採用第二種方案,建立connect連線時,增添autocommit=True屬性,自動進行commit提交。

增,刪,改

增刪改需要有提交事務的操作,查不需要提交事務,但如果迴圈查詢,務必提交事務,否則結果都是重複的

建立連線物件——db= pymysql()

建立cursor遊標物件——cur = db.cursor()

資料操作——cur.execute(sql)

提交連線事務——db.commit()

關閉cursor遊標物件——cur.close()

關閉連線物件——db.close( )

import pymysql

# 建立資料庫連線物件
db = pymysql.connect(host='127.0.0.1',
                     user='root',
                     password='pwd',
                     database='database_name')
# 建立遊標物件
cursor = db.cursor()

table_name = 'table_name '
user_id = 'yyy'
user_no = 'xxx'
sql = "UPDATE %s SET user_no = '%s' WHERE user_id = '%s'" % (table_name, user_no, user_id)
try:
    cursor.execute(sql)  # 執行sql語句,也可執行資料庫命令,如:show tables
    db.commit()  # 增刪改,必須執行事務
    print("資料更新成功")
except Exception as e:
    db.rollback()  # 若出現失敗,進行回滾
    print("資料更新失敗")
    print(e)
finally:
    cursor.close()  # 關閉當前遊標
    db.close()  # 關閉資料庫連線

使用迴圈批次更新

db = pymysql.connect(host='127.0.0.1',
                     user='root',
                     password='pwd',
                     database='database_name')

table_name = 'table_name'
update_list = ['xxx2', 'xxxx3']
condition_list = ['xxx', 'xxx1']
# 條件集合,更新集合長度相等時可使用,可根據其他情況重新編寫
cursor = db.cursor()
for i in range(len(condition_list)):
    sql = "UPDATE %s SET user_no = '%s' WHERE user_id = '%s'" % (table_name, update_list[i], 
                                                                                condition_list[i])
    print('執行sql語句:' + sql)
    try:
        cursor.execute(sql)
        db.commit()
        print("資料更新成功" + str(i+1) + '條')
    except Exception as e:
        db.rollback()
        print("資料更新失敗")
        print(e)
cursor.close()
db.close()

使用executemany(query, param) 批次更新

params為每條記錄的維度,可為巢狀陣列和元組

注意:sql語句中需要更改的資料不管什麼型別,統一使用%s作為預留位置,不需要加引號

# 建立資料庫連線物件
db = pymysql.connect(host='127.0.0.1',
                     user='root',
                     password='pwd',
                     database='database_name')
# 建立遊標物件
cursor = db.cursor()
update_list = ['a', 'b']
condition_list = ['a1', 'b1']
# 條件陣列和需要更新的資料陣列是分開的,因為param需要以每條的維度,所以可以使用拉鍊函數合併
params = zip(update_list, condition_list) # 或 param = [['a', 'a1'], ['b', 'b1']]
sql = "UPDATE map_point SET storageLocation_no = %s WHERE position_id = %s"  # 注意 這裡的 佔位%s 都不用加引號
try:
    cursor.executemany(sql, params)  # 執行sql語句
    db.commit()  # 執行事務
    print("資料批次更新成功")
except Exception as e:
    db.rollback()
    print("資料更新失敗")
    print(e)
finally:
    cursor.close()  # 關閉當前遊標
    db.close()  # 關閉資料庫連線

總結

到此這篇關於python資料庫操作指南之PyMysql使用詳解的文章就介紹到這了,更多相關python資料庫操作PyMysql使用內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com