python mysql操作封装库_python封装mysq操作,进行数据库的增删改

python操作mysql进行封装,封装的好处我就不提了,以下是我做项目时的一个封装,大家可以根据实际需要进行自己的一个封装

我封装的内容:

1.数据库的配置文件

2.获取数据配置文件的地址

3.连接数据库的操作

4.操作mysql的语句

5.调用mysql的语句--执行

封装1:数据库配置文件

config中db_conf.ini

里面主要是一些mysql的配置文件

[mysqlconf]

host=127.0.0.1

port=3306

user=root

password=123456

db_name=数据库名

封装2:读取配置文件地址public_data.py

import os

# 整个项目的根目录绝对路劲

baseDir = os.path.dirname(os.path.dirname(__file__))

# 数据库配置你文件绝对路径

config_path = baseDir + "/config/db_config.ini"

print(config_path)

打印目录地址:

封装3:数据库的连接 config_handler.py

# -*- coding:utf-8 -*-

#@Time : 2020/6/14 11:01

#@Author: 张君

#@File : config_handler.py

from configparser import ConfigParser

from config.public_data import config_path

class ConfigParse(object):

def __init__(self):

pass

@classmethod

def get_db_config(cls):

#cls使用的类方法,cls就是指定本身

cls.cfp = ConfigParser()

cls.cfp.read(config_path)

host = cls.cfp.get("mysqlconf", "host")

port = cls.cfp.get("mysqlconf", "port")

user = cls.cfp.get("mysqlconf", "user")

password = cls.cfp.get("mysqlconf", "password")

db = cls.cfp.get("mysqlconf", "db_name")

return {"host":host, "port":port, "user":user, "password":password,"db":db}

if __name__ == '__main__':

cp=ConfigParse()

result=cp.get_db_config()

print(result)

封装4:sql语句的封装 db_handle.py

import datetime

import pymysql

from utils.config_handler import ConfigParse

class DB(object):

def __init__(self):

#获取mysql连接信息

self.db_conf = ConfigParse.get_db_config()

#获取连接对象

self.conn = pymysql.connect(

host = self.db_conf["host"],

port = int(self.db_conf["port"]),

user = self.db_conf["user"],

password = self.db_conf["password"],

database = self.db_conf["db"],

charset = "utf8"

)

#获取数据的游标

self.cur = self.conn.cursor()

def close_connect(self):

# 关闭数据连接

#提交,物理存储

self.conn.commit()

#游标关闭

self.cur.close()

#连接对象关闭

self.conn.close()

def get_api_list(self):

"""获取所有的对象数据"""

sqlStr = "select * from interface_api where status=1"

self.cur.execute(sqlStr)

data = self.cur.fetchall()

#转成一个list

apiList = list(data)

return apiList

def get_api_case(self, api_id):

"""获取某一条数据"""

sqlStr = "select * from interface_test_case where api_id=%s and status=1" %api_id

self.cur.execute(sqlStr)

api_case_list = list(self.cur.fetchall())

return api_case_list

def get_rely_data(self, api_id, case_id):

"""获取所有数据库中的某一条"""

sqlStr = "select data_store from interface_data_store where api_id=%s and case_id=%s" %(api_id, case_id)

self.cur.execute(sqlStr)

rely_data = eval(self.cur.fetchall()[0][0])

return rely_data

def write_check_result(self, case_id, errorInfo, res_data):

"""更新数据库表"""

sqlStr = "update interface_test_case set error_info=\"%s\", res_data=\"%s\" where id=%s" %(errorInfo, res_data, case_id)

self.cur.execute(sqlStr)

self.conn.commit()

def insert_dab(self):

sqlStr="INSERT INTO `interface_api` VALUES (4, '修改博文', 'http://39.106.41.11:8080/getBlogContent/', 'get', 'url','0', '2018-07-27 22:13:30')"

self.cur.execute(sqlStr)

def get_api_case(self, api_id):

"""获取表中id"""

sqlStr = "select * from interface_test_case where api_id=%s and status=1" % api_id

self.cur.execute(sqlStr)

api_case_list = list(self.cur.fetchall())

return api_case_list

def get_api_id(self, api_name):

"""获取表中id"""

sqlStr = "select api_id from interface_api where api_name='%s'" % api_name

self.cur.execute(sqlStr)

api_id = self.cur.fetchall()[0][0]

return api_id

def update_store_data(self, api_id, case_id, store_data):

sqlStr = "select data_store from interface_data_store where api_id=%s and case_id=%s" % (api_id, case_id)

self.cur.execute(sqlStr)

if self.cur.fetchall():

sqlStr = "update interface_data_store set data_store=\"%s\" where api_id=%s and case_id=%s" % (

store_data, api_id, case_id)

print(sqlStr)

self.cur.execute(sqlStr)

self.conn.commit()

else:

sqlStr = "insert into interface_data_store values(%s, %s, \"%s\", '%s')" % (

api_id, case_id, store_data, datetime.now())

self.cur.execute(sqlStr)

self.conn.commit()

if __name__ == '__main__':

db=DB()

print(db.get_api_list())

print(db.get_api_case(1))

# print(db.get_rely_data(1,1))

#print(db.insert_dab())

使用ing,我新建了一个test.py文件

from utils.db_handler import DB

from action.get_rely import GetRely

from utils.HttpClient import HttpClient

def main():

#连接数据库,获取连接实例对象

db=DB()

#从数据库中获取需要执行的api执行集合

api_list=db.get_api_list()

print(api_list)

main()

至此一整套封装,与使用就完成了,为什么要分为几个文件夹,我遵循的一个原则, 使用、配置、公共方法是用不的文件夹整理,其实最终也就是你使用怎么方便,维护比较好,就怎么用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/476535.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL2000数据库中删除“坏表”的方法

SQL2000数据库中删除“坏表”的方法在一些网站或者软件系统中,由于安全或者程序异常等问题,可能会在SQL Server 2000中造成一个异常问题:在企业管理器中打开数据库发现有一些“坏表”,即无法使用,也无法正常删除。其原…

偶然当程序员却拿下图灵奖,超算榜单之父讲述人生开挂经历

文|衡宇 发自 凹非寺源|量子位40年前偶然走上程序员道路的Jack Dongarra,是今年的图灵奖得主。奖项设立机构美国计算机协会(ACM)表示,Dongarra的算法与软件成果推动了高性能计算(HPC&#xff09…

程序员面试金典 - 面试题 16.18. 模式匹配(逻辑题)

1. 题目 你有两个字符串,即pattern和value。 pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式。 例如,字符串"catcatgocatgo"匹配模式"aabab"(其中"cat"是"a&q…

拼团小程序源码_拼团软件微信拼团小程序拼团卖水果、让您快速引流

微信作为国内最大的社交平台,已经拥有11亿的用户,成为社交电商最主要的流量平台。从电商商家到线下门店,从品牌商到个体户,大家都想瓜分微信平台的流量。同时,微信也在不断完善小程序在各业务场景中的接口,…

vs2008 USB转COM口发送字符中途出错的问题.

在VS2008中,使用USB转串口发送字符,当拔下设备再插上,串口在使用的途中会抛出错误,用Try..Catch都无法捕获. 在 System.UnauthorizedAccessException 中第一次偶然出现的“System.dll”类型的异常 “Gosun.SMC.SMS.WindowService.exe”(托管): 已加载“C:"Windows"as…

python安装requests库超时_【Python 库】requests 详解超时和重试

网络请求不可避免会遇上请求超时的情况,在 requests 中,如果不设置你的程序可能会永远失去响应。超时又可分为连接超时和读取超时。连接超时连接超时指的是在你的客户端实现到远端机器端口的连接时(对应的是connect()),Request 等待的秒数。i…

IT信息业、金融业从业人员悲歌

在台湾,不论是金融从业人员、IT 软件业、硬件业、电子代工业,工程师、技术人员的工作压力都颇大。要终其一生不断学习、为公司卖命。不同的是,在台湾的电子、光电、晶圆大厂,若你身为电子、电机、硬件、Firmware、Driver 撰码工程…

程序员面试金典 - 面试题 17.26. 稀疏相似度(哈希map)

1. 题目 两个(具有不同单词的)文档的交集(intersection)中元素的个数除以并集(union)中元素的个数,就是这两个文档的相似度。 例如,{1, 5, 3} 和 {1, 7, 2, 3} 的相似度是 0.4,其中,交集的元素有 2 个,并集的元素有 …

i2c通信的详细讲解_【博文连载】SCCB(I2C)初始化时序介绍

在正式开始OV7725视频采集实现之前,Bingo不得不先讲解一下OV7725的寄存器配置接口。OV7725上电会默认输出YUV422格式的视频流,但我们希望传感器能够按照我们预期的模式工作,我们需要配置分辨率,配置内部时钟,配置亮度、…

何可欣(为奥运冠军名字作诗)

何可欣(为奥运冠军名字作诗)——代腾飞 2008年8月18日 于成都何妹归来喜外望可儿杠上敢称王欣然前往杠上翻摘得皇冠美名扬转载于:https://www.cnblogs.com/daitengfei/archive/2008/08/25/1276011.html

LeetCode 647. 回文子串(DP/中心扩展)

文章目录1. 题目2. 解题2.1 动态规划2.2 中心扩展法1. 题目 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。 示例 1: 输入: "abc…

当我问了ChatGPT 10个程序员最关心的问题,没想到…

源|AfterShip近期 OpenAI 火爆了科技圈。作为一家极客氛围浓厚,60% 都是产研的科技公司,AfterShip 的很多同学也都留意到了这个工具。因此,我们面向工程师征集共创,并筛选出了程序员最关心的十个问题。并将这些问题询问…

ipv6 访问内网_【内网渗透】—— 隐藏通信隧道技术之网络层隧道技术

hidden:是否完全隐藏控制面板,还有很多设置参数,比如也可以设置显示面板,然后设置宽高WIDTH“整数” 和 HIGH“整数”。1. 隐藏通信隧道基础1.1隐藏通信隧道技术概述常用的隧道:网络层:IPv6隧道&#xff0c…

心潮澎湃之胡言乱语

做了很长时间的思想斗争之后决定还是写下这篇文章,从毕业到现在两个月了,明天我将离开了工作两个月的公司,上帝再一次次的考验我然后又再一次次的给我机会,挫折的背后感触更多是我是上帝的宠儿,所以越到挫折时自我陶醉…

LeetCode 1277. 统计全为 1 的正方形子矩阵(DP)

1. 题目 给你一个 m * n 的矩阵,矩阵中的元素不是 0 就是 1,请你统计并返回其中完全由 1 组成的 正方形 子矩阵的个数。 示例 1: 输入:matrix [[0,1,1,1],[1,1,1,1],[0,1,1,1] ] 输出:15 解释: 边长为 …

抱抱脸:ChatGPT背后的算法——RLHF | 附12篇RLHF必刷论文

文 | 卖萌酱大家好,我是卖萌酱。前几天,抱抱脸公司(HuggingFace)发表了一篇博客[1],详细讲解了ChatGPT背后的技术原理——RLHF。笔者读过之后,觉得讲解的还是蛮清晰的,因此提炼了一下核心脉络&a…

该文件夹包含名称过长且无法放入回收站的项目_微软复活20年前生产力工具PowerToys,填补Win10缺失功能,开源且免费...

贾浩楠 发自 凹非寺量子位 报道 | 公众号 QbitAI微软PowerToys?如果你是 Win95、XP时代的老用户,可能对这个微软个官方工具集很熟悉。它包含了很多实用的系统功能增强小软件,如TweakUI、虚拟桌面工具等等,但微软在XP之后就不再更新…

SQL Server中常用全局变量介绍

在SQL Server中,全局变量是一种特殊类型的变量,服务器将维护这些变量的值。全局变量以前缀开头,不必进行声明,它们属于系统定义的函数。下表就是SQL Server中一些常用的全局变量。    全局变量名称 描述 CONNECTIONS 返回 SQL Server 自上次启动以来尝试的连接…

ChatGPT终于被缝进了搜索引擎…

文|Alex Pine 发自 凹非寺源|量子位见惯了列表式搜索引擎,你有没有想过给它换种画风?有人脑洞大开,把艳惊四座的ChatGPT和必应搜索结合起来,搞出了一个智能搜索引擎:既有ChatGPT式的问答&#x…

LeetCode 1310. 子数组异或查询(前缀异或)

1. 题目 有一个正整数数组 arr,现给你一个对应的查询数组 queries,其中 queries[i] [Li, Ri]。 对于每个查询 i,请你计算从 Li 到 Ri 的 XOR 值(即 arr[Li] xor arr[Li1] xor … xor arr[Ri])作为本次查询的结果。 …