数据库操作 pymysql 封装处理(中级)

时间:2021-10-23 01:18:49

 

上一篇是基础,这就是简单的封装了一下,一般用到的只是查询,这里也只写了查询,其他的可以继续在添加

代码如下:

 

import pymysql
from pymysql.cursors import DictCursor


class DBHandler(object):
    """
    初始化数据库
    """
    # 也可以继承 Connection 这里没有选择继承
    def __init__(self,
                 host=None,  # 连接名
                 port=3306,  # 端口
                 user=None,  # 用户名
                 password=None,  # 密码
                 charset=None,  # 不能写utf-8 在MySQL里面写utf-8会报错
                 database=None,  # 数据库库名
                 cursorclass=DictCursor,
                 **kwargs):
        self.connect = pymysql.connect(
            host=host,  # 连接名
            port=port,  # 端口
            user=user,  # 用户名
            password=password,  # 密码
            charset=charset,  # 不能写utf-8 在MySQL里面写utf-8会报错
            database=database,  # 数据库库名
            cursorclass=cursorclass,  # 数据转换成字典格式
            **kwargs
        )
        # 创建游标对象  **主要**
        self.cursor = self.connect.cursor()

    def query_one(self, query, args=None):
        """
        查询数据库一条数据
        :param query: 执行MySQL语句
        :param args: 与查询语句一起传递的参数(给语句传参) 元组、列表和字典
        """
        self.cursor.execute(query, args)
        # 将更改提交到数据库
        self.connect.commit()
        return self.cursor.fetchone()

    def query_all(self, query, args=None):
        """
        查询数据库所有数据
        :param query: 执行MySQL语句
        :param args: 与查询语句一起传递的参数(给语句传参) 元组、列表和字典
        """
        self.cursor.execute(query, args)
        # 将更改提交到数据库
        self.connect.commit()
        return self.cursor.fetchall()

    def query(self, query, args=None, one=True):
        """
        主体查询数据
        :param query: 执行MySQL语句
        :param args: 与查询语句一起传递的参数(给语句传参) 元组、列表和字典
        :param one: one是True 时候执行query_one, 否则执行query_all
        """
        if one:
            return self.query_one(query, args)
        return self.query_all(query, args)

    def close(self):
        """
        关闭
        :return:
        """
        # 关闭游标
        self.cursor.close()
        # 断开数据库连接
        self.connect.close()


if __name__ == __main__:
    db = DBHandler(
        host=127.0.0.1,  # 连接名
        port=3306,  # 端口
        user=root,  # 用户名
        password=root,  # 密码
        charset=utf8,  # 不能写utf-8 在MySQL里面写utf-8会报错
        database=pymysql_test  # 数据库库名
    )
    # 查询语句
    sql = select * from authors
    sql1 = "select * from authors where authorId = %s;"
    print(db.query(sql, one=False))
    print(db.query(query=sql1, args=[1]))
  # 关闭连接
  db.close()