ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

初探----python封装通俗易懂的数据库增、删、改、查方法

2020-05-25 12:03:57  阅读:358  来源: 互联网

标签:语句 python self 初探 通俗易懂 result sql 数据库 def


既然我们都已经会在cmd中操作数据库,那么为什么还要用python连接mysql呢?这里就涉及到接口自动化,因为我们做接口自动化避免不了需要连接数据库做一些数据库的查询,这些操作都是需要我们来连接数据库的

操作前提:

  • 电脑上已装好mysql服务,并配置好相应环境
  • 已有python环境,并装好相应的编译器(如pycharm)
  • 打开cmd ,输入: pip install pymysql ,安装pymysql库

这些已经准备好后,查看是否存在数据库

打开cmd,连接mysql,查看自己有没有数据库:
show databases;
没有就创建一个名为start的数据库:
create database start;
在这里插入图片描述

打开pycharm编译器,开始封装数据库

先创建一个DB类,并写好初始化方法

class DB():
# cursorclass将返回结果呈字典显示 ,如果传了就应用,不传就为None
    def __init__(self,host,user,password,database,cursorclass = None):
        self.host = host  #  ip地址,本机就传localhost就可以
        self.user = user  #  账户名,如果你没有更改过,那就是root
        self.password = password  # 数据库密码
        self.databases = database  # 你具体要连接的哪一个数据库
        self.cursorclass = cursorclass  # 返回结果呈字典形式  {}

在DB类下创建连接数据库的方法

    def connect(self):  # 创建连接数据库方法
        import pymysql
        # 创建数据库连接
        self.db = pymysql.connect(host = self.host,user = self.user,password =
         self.password,database = self.databases,cursorclass = self.cursorclass)
        #创建游标
        self.cursor = self.db.cursor()

这里游标的创建是为了执行sql语句,如果sql语句执行失败,同样也是需要游标回滚,否则后续的执行都会超出我们的预期范围

封装关闭数据库及游标方法

    def close(self):  #关闭方法
        self.cursor.close()  # 关闭游标
        self.db.close()  # 关闭数据库

封装查询方法

    def get_one(self,sql):  # 返回一条符合条件的查询结果
        result = 0
        try:
            self.connect()
            self.cursor.execute(sql)
            result = self.cursor.fetchone()
            self.close()
        except Exception as e:
            print('select error',e)
        return result

    def get_all(self,sql):  # 返回全部符合条件的查询结果
        result = 0
        try:
            self.connect()
            self.cursor.execute(sql)
            result = self.cursor.fetchall()
            self.close()
        except Exception as e:
            print("select error",e)
        return result

创建主函数,插入语句、删除语句、更新语句都是通过它来执行

 def __edit(self,sql):  # 创建主函数
        result = 1  #设置结果集,用于调用的时候做判断
        try:  #这里是使用的try语句来尝试进行操作
            self.connect()
            self.cursor.execute(sql)
            self.db.commit()  # 注意的是,如果是对数据库做了修改、删除、增加的操作,那么一定要commit提交,查询和创建表不需要提交
            self.close()
        except Exception as e:  # 如果操作失败,报出操作异常,且游标进行回滚
            print('error :',e)
            result = 0
            self.db.rollback()
        return result

封装修改方法、删除方法、插入数据方法

 def insert(self,sql):
        # 插入语句  ,以下三个都是一样的,只是调用的时候,我们看起来更加清晰而已
        return self.__edit(sql)  # 通过主函数的处理,来去执行sql语句

    def delete(self,sql):  #  删除语句
        return self.__edit(sql)

    def update(self,sql):  # 修改语句
        return self.__edit(sql)

实际上都是一样的,这里命名不一样是为了我们在后续执行或者回看代码的时候,更快速的知道它是属于哪一种sql语句

结合起来,展示下完整的封装数据库代码,喜欢的小伙伴可以直接copy哦~~~

class DB():
    def __init__(self,host,user,password,database,cursorclass = None):# cursorclass将返回结果呈字典显示 ,如果传了就应用,不传就为None
        self.host = host  #  ip地址,本机就传localhost就可以
        self.user = user  #  账户名,如果你没有更改过,那就是root
        self.password = password  # 数据库密码
        self.databases = database  # 你具体要连接的哪一个数据库
        self.cursorclass = cursorclass  # 返回结果呈字典形式  {}
        
    def connect(self):  # 创建连接数据库方法
        import pymysql
        # 创建数据库连接
        self.db = pymysql.connect(host = self.host,user = self.user,password =
        self.password,database = self.databases,cursorclass = self.cursorclass)
        #创建游标
        self.cursor = self.db.cursor()
        
    def get_one(self,sql):  # 返回一条符合条件的查询结果
        result = 0
        try:
            self.connect()
            self.cursor.execute(sql)
            result = self.cursor.fetchone()
            self.close()
        except Exception as e:
            print('select error',e)
        return result
        
    def get_all(self,sql):  # 返回全部符合条件的查询结果
        result = 0
        try:
            self.connect()
            self.cursor.execute(sql)
            result = self.cursor.fetchall()
            self.close()
        except Exception as e:
            print("select error",e)
        return result
        
    def __edit(self,sql):  # 创建主函数
        result = 1  #设置结果集,用于调用的时候做判断
        try:  #这里是使用的try语句来尝试进行操作
            self.connect()
            self.cursor.execute(sql)
            self.db.commit()  # 注意的是,如果是对数据库做了修改、删除、增加的操作,那么一定要commit提交,查询和创建表不需要提交
            self.close()
        except Exception as e:  # 如果操作失败,报出操作异常,且游标进行回滚
            print('error :',e)
            result = 0
            self.db.rollback()
        return result

    def insert(self,sql):
        # 插入语句  ,以下三个都是一样的,只是调用的时候,我们看起来更加清晰而已
        return self.__edit(sql)  # 通过主函数的处理,来去执行sql语句

    def delete(self,sql):  #  删除语句
        return self.__edit(sql)

    def update(self,sql):  # 修改语句
        return self.__edit(sql)


    def close(self):  #关闭方法
        self.cursor.close()  # 关闭游标
        self.db.close()  # 关闭数据库

接下来演示下怎么调用,这个就比较简单了

from 数据库_dom1 import DB
import pymysql


#实例化数据库对象sor
sor = DB(host = 'localhost',user = 'root',password = '12345678',database='start',cursorclass=pymysql.cursors.DictCursor)

# 测试创建表

sql = 'create table student(id int auto_increment primary key,name varchar(50))'
res = sor.update(sql)
if res == 1: 
# 如果结果集返回1,实际上我们在封装的时候它就是1,那么执行下面的操作
    sql = 'show tables;'
    re = sor.get_all(sql)
    print(re)
# 如果返回为0,那么打印下失败了
else:
    print('数据库操作失败')

# 插入语句

sql = 'insert into student(name) values("白嘉诚")'
res = sor.insert(sql)
if res ==1:
    sql = 'select * from student'
    re = sor.get_all(sql)
    print(re)
else:
    print("插入失败")

# 修改语句
sql = 'update student set name="马旭萌"  where name="白嘉诚"'
res = sor.update(sql)
if res ==1:
    sql = 'select * from student'
    re = sor.get_all(sql)
    print(re)
else:
    print('修改失败')

#删除语句
sql = 'delete from student where name ="马旭萌"'
res = sor.delete(sql)
if res ==1:
    sql = 'select * from student'
    re = sor.get_all(sql)
    print(re)
else:
    print('删除失败')

上面的删、改、插入方法调用起来都是一样的,这种的是比较容易理解的

这种封装数据库的方法适用于较灵活sql语句使用,比如多表联查等,没有对sql语句进行详细的封装,但是用起来肯定要比正常引用敏捷一些

标签:语句,python,self,初探,通俗易懂,result,sql,数据库,def
来源: https://blog.csdn.net/weixin_46457203/article/details/106179259

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有