再探-----python封装复用性较强的数据库增、删、改、查方法

通过上一篇的简单封装数据库方法,大家也对封装有所了解,其实封装数据库有很多种方法,但在这里,简单再封装一个对sql语句的详细封装方法

操作前提:

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

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

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

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

先创建一个DB类,并写好初始化方法及连接数据库操作

class DB():
    def __init__(self,table_name,user,host,database,password,charset): #charset是一个设置字符格式
        import pymysql
        self.connect = pymysql.connect(user = user,host = host,database = database,password = password,charset = charset)
        self.table_name = table_name

传入要做操作的表名字,即使不存在也可以,后续会创建相对应的表

之后就是连接数据库的必传参了

user = 数据库的账户名
host = ip地址,本机就传localhost就可以
database = 你要连接的数据库名
password = 你的数据库密码
charset = 设置数据库的字符集

创建表方法

    def get_table(self):  #创建表
        #  这里用的是拼接,通过你传入的表名字来创建相应的表,当然,这里的表结构你也可以改变
        sql = 'create table ' + self.table_name + "(id int primary key auto_increment,name varchar(20),age" \
                                                  " int,address varchar(30)) "
        try:
            # 使用with语句可以免去关闭游标和数据库的操作
            with self.connect.cursor() as cursor:
                cursor.execute(sql)
        except:
            # 如果报错,游标回滚
            self.connect.rollback()

需要注意的是,在写create table 时,后面要跟上空格,要不sql语句会粘到一起

id int primary key auto_increment 设置id为主键,且自增

封装清空表数据方法

    def clear_data(self):
        #清空表内全部数据,恢复初始状态,如果你是copy的代码在工作中的话,慎用此方法
        sql = 'delete from ' + self.table_name  #需要注意的是,在delete from后面要有空格隔开
        with self.connect.cursor() as cursor:
            # 取消绑定主键
            cursor.execute('set foreign_key_checks =0;')
            cursor.execute(sql)
        # 对数据库进行删除、修改、插入语句记得commit到数据库
        self.connect.commit()

这里也是一样,在写完delete from 时,后面要跟上空格

且在做了操作以后,要记得commit()提交到数据库

插入数据方法

    def insert_into(self,datas):
        # datas 需要插入到数据库中的数据,传入格式为字典,如{"name":"白嘉诚","age":"20"}
        # 做循环处理,将每一个循环到的值转换为字符串形式
        for i in datas:
            datas[i] = "'" + str(datas[i]) + "'" #  打印结果: '白嘉诚' '20'
            print(datas[i])
        key = ','.join(datas.keys())  # 做变量存储及逗号拼接,key保留传入字典形式的键
        values = ','.join(datas.values()) # 做变量存储及逗号拼接,values保留传入字典形式的值
        # 需要注意的是,insert into后面要有空格隔开
        sql = "insert into " + self.table_name + "(" + key + ") values (" + values + ")"
        # 这里就是关键了,通过上面的方法进行处理后,我们只需要传入有键(字段)和值(相对应的字段值)就可以插入语句
        try:
            with self.connect.cursor() as cursor:
                cursor.execute(sql)
            self.connect.commit()
        except Exception as e:
            print("insert into error",e)
            self.connect.rollback()

这种封装还算比较实用,因为我只需要传入一个有键、值的字典就行,比如我现在一个只有name的字段的表,那么传入的datas就可以这样:
{“name”:“某某某”}

当然,多了也是可以,举个例子,后面会写上调用

查询语句封装

 def select_data(self,name,value):  # name为字段名,value为你要查询的值
        sql = 'select * from ' + self.table_name + " where " + name + "=" + "'" + value + "'"
        try:
            with self.connect.cursor() as cursor:
                cursor.execute(sql)
                return cursor.fetchall()
        except Exception as e:
            print("表内没有这样的数据")

也是一样,记得在写好select * from 后面要加上空格

这里返回的是所有符合查询条件的数据

其中封装方法中的name就是数据库表中的字段名,value就是我们要查找的对应值

调用封装,简单实例

#实例化DB类
a = DB('student',user = 'root',database = 'user',password = '12345678',host = 'localhost',charset = 'utf8mb4')

a.get_table()  #调用创建表方法

a.clear_data()  #清除表内数据

a.insert_into(datas = {"name":"佰嘉城","age":"20","address":"吉林"}) # 插入一条数据

print(a.select_data("name","佰嘉城"))  # 查询符合条件的数据

全部代码演示

class DB():
    def __init__(self,table_name,user,host,database,password,charset): #charset是一个设置字符格式
        import pymysql
        self.connect = pymysql.connect(user = user,host = host,database = database,password = password,charset = charset)
        self.table_name = table_name

    def get_table(self):  #创建表
        #  这里用的是拼接,通过你传入的表名字来创建相应的表,当然,这里的表结构你也可以改变
        sql = 'create table ' + self.table_name + "(id int primary key auto_increment,name varchar(20),age" \
                                                  " int,address varchar(30)) "
        try:
            # 使用with语句可以免去关闭游标和数据库的操作
            with self.connect.cursor() as cursor:
                cursor.execute(sql)
        except:
            # 如果报错,游标回滚
            self.connect.rollback()
    def clear_data(self):
        #清空表内全部数据,恢复初始状态,如果你是copy的代码在工作中的话,慎用此方法
        sql = 'delete from ' + self.table_name  #需要注意的是,在delete from后面要有空格隔开
        with self.connect.cursor() as cursor:
            # 取消绑定主键
            cursor.execute('set foreign_key_checks =0;')
            cursor.execute(sql)
        # 对数据库进行删除、修改、插入语句记得commit到数据库
        self.connect.commit()

    def insert_into(self,datas):
        # datas 需要插入到数据库中的数据,传入格式为字典,如{"name":"白嘉诚","age":"20"}
        # 做循环处理,将每一个循环到的值转换为字符串形式
        for i in datas:
            datas[i] = "'" + str(datas[i]) + "'" #  打印结果: '白嘉诚' '20'
            print(datas[i])
        key = ','.join(datas.keys())  # 做变量存储及逗号拼接,key保留传入字典形式的键
        values = ','.join(datas.values()) # 做变量存储及逗号拼接,values保留传入字典形式的值
        # 需要注意的是,insert into后面要有空格隔开
        sql = "insert into " + self.table_name + "(" + key + ") values (" + values + ")"
        # 这里就是关键了,通过上面的方法进行处理后,我们只需要传入有键(字段)和值(相对应的字段值)就可以插入语句
        try:
            with self.connect.cursor() as cursor:
                cursor.execute(sql)
            self.connect.commit()
        except Exception as e:
            print("insert into error",e)
            self.connect.rollback()

    def select_data(self,name,value):  # name为字段名,value为你要查询的值
        sql = 'select * from ' + self.table_name + " where " + name + "=" + "'" + value + "'"
        try:
            with self.connect.cursor() as cursor:
                cursor.execute(sql)
                return cursor.fetchall()
        except Exception as e:
            print("表内没有这样的数据")

if __name__ == '__main__':
    a = DB('student',user = 'root',database = 'user',password = '12345678',host = 'localhost',charset = 'utf8mb4')
    a.get_table()
    a.clear_data()
    a.insert_into(datas = {"name":"佰嘉城","age":"20","address":"吉林"})
    print(a.select_data("name","佰嘉城"))

utf8mb4和utf8的区别我就不详细说了,大家可以看看这篇博客:https://blog.csdn.net/grl18840839630/article/details/105597074

总的而言,较比上一篇博客的数据库封装,这种的相对简单一些,但是比较笨拙,比如多表联查。

做一般的增、删、改、查还算是比较友好,看大家喜欢了

猜你喜欢

转载自blog.csdn.net/weixin_46457203/article/details/106182697