首页 > 数据库 >python之封装mysql

python之封装mysql

时间:2023-04-12 17:58:51浏览次数:26  
标签:__ 封装 python res self mysql sql return type

 数据查询类封装

1. 功能分析

  1. 可以连接不同sql数据库
  2. 查一条数据,多条数据
  3. 可以获取不同格式的数据

2. 封装成数据库查询类

封装思路:

  1. 数据库查询模块有多个功能,且需要复用,所以封装成类

  2. 在构造方法中创建连接

  3. 创建对象方法实现各种查询

    # -*- coding: utf-8 -*-
    # @Time : 2019/11/13 14:51
    # @Author : kira
    # @Email : [email protected]
    # @File : do_mysql.py
    # @Project : risk_project
    
    import pymysql
    from pymysql.cursors import DictCursor
    
    
    class DoMysql:
        """
        sql数据库查询类
        """
    
        def __init__(self, db_config: dict):
            # 创建连接
            engine = db_config.pop('engine', 'mysql')
            if engine.lower() == 'mysql':
                self.conn = pymysql.connect(**db_config)
            elif engine.lower() == 'oracle':
                pass
    
        def __execute(self, sql, action, res_type='t', *args):
            """
            :param sql:
            :param action: 字符串,指定执行cursor对应的方法
            :param res_type: 返回数据类型
            :param args: 
            :return:
            """
            if res_type == 't':
                cursor = self.conn.cursor()
            else:
                cursor = self.conn.cursor(DictCursor)
            try:
                cursor.execute(sql)
                return getattr(cursor, action)(*args)
            except Exception as e:
                raise e
            finally:
                cursor.close()
    
        def get_one(self, sql, res_type='t'):
            """
            获取一条数据
            :param sql:
            :param res_type: 返回数据的类型,默认为t表示以元组返回,'d'表示以字典的形式返回
            :return: 元组/字典
            """
            # 数据库若断开即重连
            self.reConnect()
            return self.__execute(sql, 'fetchone', res_type)
    
        def get_many(self, sql, size, res_type='t'):
            # 数据库若断开即重连
            self.reConnect()
            return self.__execute(sql, 'fetchmany', res_type, size)
    
        def get_all(self, sql, res_type='t'):
            # 数据库若断开即重连
            self.reConnect()
            return self.__execute(sql, 'fetchall', res_type)
    
        def exist(self, sql):
            if self.get_one(sql):
                return True
            else:
                return False
    
        def reConnect(self):
            """
            重连机制
            :@return
            """
            try:
                self.conn.ping()
            except:
                self.conn()
    
        def __del__(self):
            """
            对象销毁的时候自动会被调用
            :return:
            """
            self.conn.close()
    
    
    if __name__ == '__main__':
        db = {
            'engine': 'mysql',  # 指定mysql数据
            'host': '127.0.0.1',
            'user': 'admin',
            'password': '12345',
            'port': 3306,
            'db': 'mysql',
            'charset': 'utf8'
        }
        db = DoMysql(db)
        sql = 'select id, reg_name, mobile_phone from member limit 10'
        # res = db.get_one(sql)
        res = db.get_many(sql, size=5)
        print(res)

     

标签:__,封装,python,res,self,mysql,sql,return,type
From: https://www.cnblogs.com/Nephalem-262667641/p/17310614.html

相关文章

  • 更新 Python 的 setuptools 包
    [......
  • python自动化之unittest
    一、官方文档:https://docs.python.org/zh-cn/3/library/unittest.html二、unittest使用unittest使用规范需要导入unittest包测试类必须继承unittest.TestCase类测试方法必须要以test开头测试用例名称不能相同,相同的情况可能出现用例遗漏执行的情况ddt使用事项见下方......
  • python关于*args所能接收的参数、关于**kwargs所接收的参数详解
    1#!/usr/bin/envpython2#-*-coding:utf8-*-3#python-day32-20170110:456#关于*args所能接收的参数78#这种接收的是位置参数,可变长9deffunc1(*args):10print(args,type(args))1112#传入位置参数可以被args所接收,以元组的形式来保存......
  • 漏洞-Oracle MYSQL Server 安全漏洞(CVE-2022-1292)
    https://blog.csdn.net/weixin_45839894/article/details/126158078openssl:relocationerror:openssl:symbolEVP_mdc2versionOPENSSinedinfilelibcrypto.so.1.1withlinktimereference建议先删掉/usr/bin/openssl......
  • mysql insert|replace语法
    insert语法replace语法版权声明:本文所有权归作者!商业用途转载请联系作者授权!非商业用途转载,请标明本文链接及出处!赞成、反驳、不解的小伙伴,欢迎一起交流!......
  • mysql 使用分区partition_name 作为条件查询
       SELECT*FROMmy_tablePARTITION(partition_name)WHEREcolumn_name='value';```将`my_table`替换为您的表名,将`partition_name`替换为您要查询的分区的名称,将`column_name`替换为您要用作条件的列的名称,将`'value'`替换为您要用作过滤器的值。......
  • python get请求抓取网页
    importrequestsurl='https://www.douban.com/search?'#req=requests.get(url)headers={"User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/94.0.4606.81Safari/537.36......
  • 【VINKA原厂技术支持】电源供电系列高稳定性抗干扰VK36Q4 DFN10 封装更小厚度超薄的四
    1.概述VK36Q4具有4个触摸按键,可用来检测外部触摸按键上人手的触摸动作。该芯片具有较高的集成度,仅需极少的外部组件便可实现触摸按键的检测。提供了4路直接输出功能。芯片内部采用特殊的集成电路,具有高电源电压抑制比,可减少按键检测错误的发生,此特性保证在不利环境条件的应用......
  • Python 环境迁移
    平时用python环境会装一堆依赖,也包括自己的模块,要迁移到陌生环境,得好好处理才行。下面介绍个方法,实践过还可以:总结下步骤:miniconda或conda安装一个python环境,python版本最好和后面新环境一样。condacreate-nszpython=3.6.8在该conda里面装好自己的各种依赖,并跑起来。pi......
  • 再次思考一下Mysql的ACID
    ACID是事务的特性:一致性、原子性、隔离性、持久性。(记不住的话,一原隔持-依然搁置)事务本身来讲,是具有强隔离性的。即一个事务想访问另外一个事务正在访问的数据,需要排队。这种强隔离性,导致并发情况下的访问性能受限。但是有的时候,隔离性弱一点,可以带来的并发访问性能的提升,这个正......