概述
Python 记录操作MySql数据库(封装)——优雅
- 前言
- 封装代码
- 进行测试
- 结果展示
前言
学了pymysql第三方库(pip install pymysql)来操作MySql数据库后,浅记一下对MySql进行 《关于我的MySql之优雅封装这件事儿》。这里只涉及了单表的增、删、查、改这些简单地封装操作,便于对简单的sql语句进行快速使用。
首页,利用Navicat连接本地的MySql数据库来快速新建一个(pythondemo)数据库,在里面快速创建两张空表(tb_test,tb_user)用于测试,其中主要使用tb_user表来进行数据测试,如下图进行tb_user的简单设计(将其中的id字段设为自动递增,便于在insert插入数据时少写一个字段。):
能实现简单的功能有:
- 以元组类型快速insert插入数据
- 通过id删除数据
- 通过传入id快速查询返回一条数据,返回结果
- 直接调用方法查询表中所有数据,返回结果
- 指定查询返回多少条数数据,可根据简单条件查询(where 字段=”“),返回结果
- 通过id修改数据
- 可通过自定义sql语句执行
将以下代码可复制到一个py模块中即可运行(注意:要修改自己连接的数据库配置)!!!
封装代码
# -*- coding:utf-8 -*-
"""
@File : my_mysql.py
@Time : 2022/9/3 17:32
"""
import pymysql
class MySql:
def __init__(self, operate_tablename:str,my_sqldb_config_param:dict):
assert isinstance(my_sqldb_config_param,dict),"请以字典类型的格式传入!"
self._operate_tablename = operate_tablename
try:
self._conn = pymysql.connect(**my_sqldb_config_param) # 连接数据库,配置参数
self._cursor = self._conn.cursor() # 创建一个游标,用来执行查询
self._get_field() # 获取此表中的字段名
except Exception as e:
raise Exception(f"数据库连接失败!!!n请检查表名、配置参数是否正确或检查本地数据库是否已启动!n{e}")
# 获取_conn对象
@property
def get_connect(self):
return self._conn
# 获取_cursor对象
@property
def get_cursor(self):
return self._cursor
# 获取__desc对象
@property
def get_description(self):
# print(f"{self._operate_tablename}表中的字段属性:",self._desc)
return self._desc
# 获取正在操作的表名
@property
def operate_tablename(self):
return f"正在操作 {self._operate_tablename}表!!!"
# 修改要操作的表
@operate_tablename.setter
def operate_tablename(self,operate_tablename):
assert operate_tablename !="", "请输入要操作的表名!"
print(f"{self._operate_tablename} 表已被更换!")
self._operate_tablename = operate_tablename
self._get_field()
# 获取此表中的字段名
def _get_field(self):
self._cursor.execute(f"select * from {self._operate_tablename}")
self._desc = self._cursor.description
self._field_ = []
for field in self._desc:
self._field_.append(field[0])
# 执行sql语句
def _sql(self,sql,msg=""):
try:
self._cursor.execute(sql) # 执行sql语句
self._conn.commit() # 执行sql语句后,进行提交
if msg:print(f"数据{msg}成功!")
return True
except Exception as e:
if msg:print(f"