发现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的数据库参数为:db
和database
,密码参数为:passwd
和password
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的数据库参数名可以为:dbname
和database
,密码参数为password
。