1. 程式人生 > 其它 >Python 常用第三方庫 pymysql

Python 常用第三方庫 pymysql

pymysql 概述

  • Python 的資料庫介面標準是 Python DB-API

  • PyMySQL 是從 Python 連線到 MySQL 資料庫伺服器的介面

  • PyMySQL 的目標是成為 MySQLdb 的替代品

  • 官方文件:http://pymysql.readthedocs.io/

pymysql 安裝

  • 使用 pip 安裝 pip install pymysql

  •  使用 Pycharm 介面安裝

pymysql 連線資料庫

  • host:MySQL 伺服器地址
  • user:使用者名稱
  • password:密碼
  • database:資料庫名稱
  • charset:編碼方式,推薦使用 utf8mb4
# 1.匯入庫
import pymysql

# 2.建立連線
conn = pymysql.connect(host='伺服器地址',
                     user='使用者名稱',
                     password='密碼',
                     database='資料庫名',
                     charset="utf8mb4")
# 3.關閉連線
conn.close()

pymysql 連線資料庫

  • 封裝獲取連線的函式
import pymysql

# 1.封裝建立連線的物件
def get_conn():
    conn = pymysql.connect(
        host="伺服器地址",
        user="root",
        password="123456",
        database="資料庫名",
        charset="utf8mb4"
    )

    return conn

pymysql 入門例項

  • 獲取連線物件
    • 開啟
    • 關閉
  • 獲取遊標物件
    • 執行 SQL
    • 查詢記錄
from . import get_conn

def test_demo():
    # 1.獲取連線物件
    conn = get_conn()
    # 2.獲取遊標物件
    cursor = conn.cursor()
    # 3.執行SQL
    cursor.execute("SELECT VERSION()")
    # 4.查詢結果
    version = cursor.fetchone()
    print(f"資料庫的版本是:{version}")
    # 5.關閉連線
    conn.close()

pymysql 建立表

  • 建立表 testcase
from . import get_conn

def test_create():
    conn = get_conn()  # 獲取連線
    cursor = conn.cursor()  # 獲取遊標

    sql = """
    CREATE TABLE `testcase` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `title` varchar(255) COLLATE utf8_bin NOT NULL,
    `expect` varchar(255) COLLATE utf8_bin NOT NULL,
    `owner` varchar(255) COLLATE utf8_bin NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
    """
    cursor.execute(sql)  # 執行SQL
    conn.close()  # 關閉連線

pymysql 插入操作

  • 插入記錄
from . import get_conn

def test_insert():

    conn = get_conn()  # 獲取連線
    cursor = conn.cursor()  # 獲取遊標

    sql = """INSERT INTO testcase
    (id, title, expect, owner)
    values (1, 'S11總決賽', '冠軍', 'EDG');
    """

    cursor.execute(sql)  # 執行SQL
    conn.commit()  # 提交

執行事務

  • 提交操作:commit()
  • 回滾操作:rollback()
  • try-catch-finally
from . import get_conn

def test_insert():
    conn = get_conn()  # 獲取連線
    cursor = conn.cursor()  # 獲取遊標

    sql = """INSERT INTO testcase
    (id, title, expect, owner)
    values (2, 'S11全球總決賽', '冠軍', 'EDG');
    """
    try:
        cursor.execute(sql)  # 執行SQL
        conn.commit()  # 提交事務
    except:
        conn.rollback()  # 回滾事務
    finally:
        conn.close()  # 關閉連線

pymysql 查詢操作

  • 查詢操作
    • fetchone():獲取單條記錄
    • fetchmany(n):獲取 n 條記錄
    • fetchall():獲取所有結果記錄
import sys
from . import get_conn

def test_retrieve():
    conn = get_conn()  # 獲取連線
    cursor = conn.cursor()  # 獲取遊標
    sql = "SELECT * FROM testcase;"
    # 捕獲異常
    try:
        cursor.execute(sql)  # 執行SQL
        record = cursor.fetchone()  # 查詢記錄
        print(record)
    except Exception as e:
        print(sys.exc_info())  # 列印錯誤資訊
    finally:
        conn.close()  # 關閉連線

pymysql 更新操作

  • 更新資料表的資料
from . import get_conn

def test_update():
    conn = get_conn()
    cursor = conn.cursor()
    sql = "UPDATE testcase SET owner='hogwarts' WHERE id=2;"
    try:
        cursor.execute(sql)  # 執行SQL
        conn.commit()  # 提交事務
    except:
        conn.rollback()  # 回滾事務
    finally:
        conn.close()  # 關閉連線

pymysql 刪除操作

  • 刪除資料表的資料
from . import get_conn

def test_delete():
    conn = get_conn()  # 獲取連線
    cursor = conn.cursor()  # 獲取遊標
    sql = "DELETE FROM testcase WHERE id=3;"
    try:
        cursor.execute(sql)  # 執行SQL
        conn.commit()  # 提交事務
    except:
        conn.rollback()  # 回滾事務
    finally:
        conn.close()  # 關閉連線