MySQL 链接封装(python)

254 阅读1分钟

1、核心要素

  1. 数据库链接对象
  2. 游标链接对象
  3. 数据连接的参数 (主机名 端口号 用户名 密码 链接数据库的名称 )
  4. sql 语句 (DQL DDL DML DCL )
  5. 数据库中的事务

2、相关知识点

pymysql 模块

3、python代码实现

  1. 构造函数
  2. 链接对象
  3. 游标对象
  4. 关闭链接
  5. 执行sql
import pymysql


class DBUtil():
    # initial 
    __conn = None
    __cursor = None
    @classmethod
    def __init__(cls, host, port, user, password, database):
        cls.host = host
        cls.port = port
        cls.user = user
        cls.password = password
        cls.database = database

    # connection
    @classmethod
    def __get_conn(cls):
        if cls.__conn is None:
            cls.__conn = pymysql.connect(host=cls.host,
                                         port=cls.port,
                                         user=cls.user,
                                         password=cls.password,
                                         database=cls.database)
            return cls.__conn

    # cursor
    @classmethod
    def __get_cursor(cls):
        if cls.__cursor is None:
            cls.__cursor = cls.__get_conn().cursor()
        return cls.__cursor

    @classmethod
    def close_cursor(cls):
        if cls.__cursor:
            cls.__get_cursor().close()
            cls.__cursor = None

    @classmethod
    def close_conn(cls):
        if cls.__conn:
            cls.__get_conn().close()
            cls.__conn = None

    # sql
    @classmethod
    def exe_sql(cls, sql):
        try:
            # cursor
            cursor = cls.__get_cursor()
            # sql execute
            cursor.execute(sql)
            # if select
            if sql.split(" ", 1)[0].lower() == "select":
                # 返回所有数据内容
                return cursor.fetchall()
            # transaction
            cls.__conn.commit()
            return cursor.rowcount
        except Exception as e:
            cls.__conn.rollback()
            print(e)
        finally:
            cls.__get_cursor()
            cls.__get_conn()