Python 数据库连接池

连接池可以有效减少与数据库建立连接和关闭的一个开销。

以下代码记录:

import pymysql
from dbutils.pooled_db import PooledDB
import pandas as pd

class SqlFunct():
    __instance = None

    def __new__(cls):
        if cls.__instance is None:
            cls.__instance = super().__new__(cls)
            return cls.__instance
        else:
            return cls.__instance

    def __init__(self):
        config = {
            'creator': pymysql,
            'host': "",
            'port': "",
            'user': "",
            'password': "",
            'db': "",
            'charset': "utf8mb4",
            'maxconnections': 10,  # 连接池最大连接数量
            'cursorclass': pymysql.cursors.DictCursor
        }
        self.pool = PooledDB(**config)

    def get_connection(self):
        conn = self.pool.connection()
        cursor = conn.cursor()
        return conn,cursor

    def insert_db(self,sql,value):
        """
        插入数据库
        """
        try:
            conn,cursor = self.get_connection()
            cursor.execute(sql, value)
            conn.commit()
            # cursor.close()
            conn.close()
            print('完成插库', value[2])
            return 1

        except Exception as e:
            # print(e)
            if 'Duplicate' in str(e):
                return 0
            else:
                print(f"插入数据时出现了错误:{e} | {value[2]}")
            if 'TaskConfig_UN' in str(e) or 'ErrorTask_UN' in str(e):
                print(f'TaskConfig_UN or ErrorTask_UN | {value}')
                return 2
            else:
                return 0

    def update_db(self,sql):
        """
        更新数据库
        """
        try:
            conn,cursor = self.get_connection()
            cursor.execute(sql)
            conn.commit()
            # cursor.close()
            conn.close()
        except Exception as e:
            print(f"更新信息时出现了错误:{e}")

    def update_db2(self,sql, value):
        """
        更新数据库
        """
        try:
            conn,cursor = self.get_connection()
            cursor = conn.cursor()
            cursor.execute(sql, value)
            conn.commit()
            # cursor.close()
            conn.close()
        except Exception as e:
            print(f"更新信息时出现了错误:{e} | {value}")

    def select_db(self,sql):
        """
        查询数据库
        """
        try:
            conn,cursor = self.get_connection()
            cursor.execute(sql)
            info = cursor.fetchall()
            # cursor.close()
            conn.close()
            return info
        except Exception as e:
            print(e)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值