对PyMySql简单的二次封装

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Tester_xjp/article/details/83514975

本人新手,刚开始上手类,代码不规范的地方,大家可以直接评论在下面  。

本次是基于PyMySql的的二次封装, 所以运行此代码之前  首先安装PyMySQL

在cmd中运行“pip  install  PyMySql”  安装即可,先来一个实际运行截图

好了献上源代码一份

# author: xiejiangpeng
# time:2018/10/28/11:03
# version:python3.6
# message:对mysql进行简单的二次封装,主要有,建表,插入语句登

import pymysql

"""
说明:
1.maketable()  格式 : tablename(表名),**field(key='字段名',value='字段说明')  默认的字段类型为varchar(255)
2.insertsqlone()  格式 : tablename,**field(key='字段名',value='字段值')  **field长度不限
3.querysql()  格式 : querysql(查询sql)
4.update() 格式 : updatesql(更新sql)
5.deleteone() 格式 : tablename,**field(查询条件 比如 id=1)
"""


class DiyMysql(object):

    def __init__(self, host, port, user, passwd, db, charset):
        self.host = host
        self.port = port
        self.user = user
        self.passwd = passwd
        self.db = db
        self.charset = charset
        try:
            self.condb = pymysql.connect(host=self.host, port=self.port, user=self.user,
                                         passwd=self.passwd, db=self.db, charset=self.charset)
        except Exception as abnormal:
            print("数据库连接错误,错误内容%s " % abnormal)
        # 创建一个游标对象
        self.cursor = self.condb.cursor()

    def maketable(self, tablename, **field):

        basesql = ""  # 定义basesql
        # 判断表名为tablename表名是否存在,如果是 直接删除
        self.cursor.execute("DROP TABLE IF EXISTS %s" % tablename)

        # 将field,拼接basesql
        for key in field:
            basesql = basesql + "%s varchar(255) DEFAULT NULL COMMENT '%s'," % (key, field.get(key))

        makesql = """
        CREATE TABLE %s (
  id int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  %s
  PRIMARY KEY (`id`)
)
        """ % (tablename, basesql)
        # 执行建表SQL
        self.cursor.execute(makesql)
        print("表:'%s' 创建成功" % tablename)

    def insertsqlone(self, tablename, **field):

        i = 0
        liststr = ""  # 字段的集合
        listvalues = []  # values字段对应值的集合
        for key in field:
            liststr = liststr + "%s," % key
            listvalues.append(field[key])
            i = i + 1
        listfield = "(" + liststr[0:len(liststr) - 1] + ")"  # 最终的字段集合
        values = tuple(listvalues)  # 最终的字段值集合

        # sql语句
        insertsql = "INSERT INTO %s%s VALUES %s" % (tablename, listfield, values)
        try:
            self.cursor.execute(insertsql)  # 执行SQL
            self.condb.commit()  # 提交到数据库执行
        except Exception as abnormal:
            self.condb.rollback()  # 发生错误的时候 回滚
            print("执行失败 insert语句:'%s',失败信息为 %s" % (insertsql, abnormal))
        # 判断是否执行成功
        if self.cursor.rowcount == 1:
            print("执行成功 insert语句:'%s'" % insertsql)

    def querysql(self, sqlquery):
        try:
            self.cursor.execute(sqlquery)  # 影响的行数
        except Exception as abnormal:
            print("SQL有误,错误内容 %s" % abnormal)
        if self.cursor.rowcount == 0:  # 0 则代表没有查询结果
            return "没有查询的结果.."
        elif self.cursor.rowcount == 1:  # 影响行数 为1 fetchone
            return list(self.cursor.fetchone())
        else:  # 多行情况下 使用fetchall
            return list(self.cursor.fetchall())

    def update(self, updatesql):
        try:
            self.cursor.execute(updatesql)
            self.condb.commit()
        except Exception as abnormal:
            self.condb.rollback()
            print("执行失败!update语句:'%s', 失败内容为 %s" % (updatesql, abnormal))
            exit()
        # 判断是否更新成功
        if self.cursor.rowcount == 1:
            print("执行成功!update语句:'%s'" % updatesql)
        else:
            print("执行成功!update语句:'%s',warning:更新后的值与跟新之前的值相等,或者查询不到对应的结果" % updatesql)

    def deleteone(self, deletesql):
        try:
            self.cursor.execute(deletesql)
            self.condb.commit()
        except Exception as abnormal:
            self.condb.rollback()
            print("执行失败!delete语句:'%s', 失败内容为 %s" % (deletesql, abnormal))
            exit()
        # 判断是否更新成功
        if self.cursor.rowcount == 1:
            print("执行成功!delete语句:'%s'" % deletesql)

    # 析构函数
    def __del__(self):
        self.cursor.close()
        self.condb.close()


if __name__ == '__main__':
    # 实例化
    diycon = DiyMysql(host="127.0.0.1", port=3306, user="root",
                      passwd="xxx", db="dbname", charset="utf8")

    # 1.新建一个名称为的表,字段为name,age,address,其中的value为字段说明
    diycon.maketable(tablename="tb_xiejiangpeng", name="姓名", age="年龄", address="家庭住址")

    # 2.在tb_xiejiangpeng表中 插入一条数据
    diycon.insertsqlone(tablename="tb_xiejiangpeng", name="谢江鹏", age="22", address="湖南长沙")

    # 3.根据name=谢江鹏 查询刚才插入的数据
    queryresult = diycon.querysql("select * from tb_xiejiangpeng where name='谢江鹏'")
    print("查询到的结果为:", queryresult)

    # 4.将id=1的那条数据 名称修改成"彭敏"
    diycon.update("update tb_xiejiangpeng set name='彭敏' where id ='1'")

    # 5.删除name='彭敏'的那条数据
    diycon.deleteone("delete from tb_xiejiangpeng where name='彭敏'")

猜你喜欢

转载自blog.csdn.net/Tester_xjp/article/details/83514975