PooledDB不同的creator不能取相同的数据库参数名

发现dbutils的一个bug

from dbutils.pooled_db import PooledDB

class MySQL():
    def __init__(self, host, port, dbname, user, password, charset=u'utf8mb4'):
        self.host = host
        if isinstance(port, str):
            port = int(port)
        self.port = port
        self.dbname = dbname
        self.user = user
        self.password = password
        self.charset = charset

        self.start_conn()

    def start_conn(self):
        try:

            self.__pool = PooledDB(creator=pymysql, 
                                   mincached=1, 
                                   maxcached=4, 
                                   maxconnections=4,
                                   blocking=True,
                                   host=self.host,
                                   port=self.port,
                                   db=self.dbname,
                                   user=self.user,
                                   passwd=self.password,
                                   charset=self.charset
                                   )
            # PooledDB不同的creator不能取相同的数据库参数名
            # psycopg2叫dbname,那么pymysql就不能取dbname。
            # 这一步出现异常 2023/04/18
            self.conn = self.__pool.connection()
            self.conn.cursor()
            logger.info('connect success')
            return True
        except:
            return False
import psycopg2


class PostgreSQL():
    def __init__(self, host, port, dbname, user, password):
        self.host = host
        if isinstance(port, str):
            port = int(port)
        self.port = port
        self.dbname = dbname
        self.user = user
        self.password = password

        self.start_conn()


    def start_conn(self):
        try:
            self.__pool = PooledDB(creator=psycopg2,
                                   mincached=1,
                                   maxcached=4,
                                   maxconnections=4,
                                   blocking=True,
                                   host=self.host,
                                   port=self.port,
                                   dbname=self.dbname,
                                   user=self.user,
                                   password=self.password
                                   )
            self.conn = self.__pool.connection()
            self.conn.cursor()
            logger.info('connect success')
            return True
        except:
            return False

经过查证比对,发现pymysql的参数可以去pymysql.connections查看,psycopg2的参数名可以去psycopg2.connect()查看。

class Connection(object):
   def __init__(self, host=None, user=None, password="",
                database=None, port=0, unix_socket=None,
                charset='', sql_mode=None,
                read_default_file=None, conv=None, use_unicode=None,
                client_flag=0, cursorclass=Cursor, init_command=None,
                connect_timeout=10, ssl=None, read_default_group=None,
                compress=None, named_pipe=None,
                autocommit=False, db=None, passwd=None, local_infile=False,
                max_allowed_packet=16*1024*1024, defer_connect=False,
                auth_plugin_map=None, read_timeout=None, write_timeout=None,
                bind_address=None, binary_prefix=False, program_name=None,
                server_public_key=None):
       if use_unicode is None and sys.version_info[0] > 2:
           use_unicode = True

       if db is not None and database is None:
           database = db
       if passwd is not None and not password:
           password = passwd

可以看到pymysql的数据库参数为:dbdatabase,密码参数为:passwdpassword

db 或 database
def connect(dsn=None, connection_factory=None, cursor_factory=None, **kwargs):
    """
    Create a new database connection.

    The connection parameters can be specified as a string:

        conn = psycopg2.connect("dbname=test user=postgres password=secret")

    or using a set of keyword arguments:

        conn = psycopg2.connect(database="test", user="postgres", password="secret")

    Or as a mix of both. The basic connection parameters are:

    - *dbname*: the database name
    - *database*: the database name (only as keyword argument)
    - *user*: user name used to authenticate
    - *password*: password used to authenticate
    - *host*: database host address (defaults to UNIX socket if not provided)
    - *port*: connection port number (defaults to 5432 if not provided)

psycopg2的数据库参数名可以为:dbnamedatabase,密码参数为password

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值