56 lines
1.7 KiB
Python
56 lines
1.7 KiB
Python
# coding=utf-8
|
|
|
|
from sqlalchemy import create_engine
|
|
|
|
try:
|
|
from loguru import logger
|
|
except ImportError:
|
|
import logging
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def get_db_engine(**kwargs):
|
|
uri_format = 'mysql+pymysql://%s:%s@%s:%s/%s?charset=%s'
|
|
try:
|
|
dbname = kwargs.get('name', '')
|
|
passwd = kwargs.get('password', '')
|
|
port = kwargs.get('port', '3306')
|
|
user = kwargs.get('user', '')
|
|
host = kwargs.get('host', '')
|
|
charset = kwargs.get('charset', 'UTF8MB4')
|
|
connect_uri = uri_format % (user, passwd, host, port, dbname, charset)
|
|
db = create_engine(connect_uri, echo=False, pool_recycle=3600, pool_pre_ping=True)
|
|
return db
|
|
except Exception as e:
|
|
logger.error('Connect Error happens : %s' % e)
|
|
|
|
|
|
def ssh_get_db_engine(**kwargs):
|
|
from sshtunnel import SSHTunnelForwarder
|
|
|
|
uri_format = 'mysql+pymysql://%s:%s@%s:%s/%s?%s'
|
|
try:
|
|
host = kwargs.get('host', '')
|
|
port = kwargs.get('port', '3306')
|
|
|
|
ssh_port = kwargs.get('ssh_port', '')
|
|
ssh_user = kwargs.get('ssh_user', '')
|
|
ssh_passwd = kwargs.get('ssh_password', '')
|
|
|
|
server = SSHTunnelForwarder(
|
|
(host, ssh_port),
|
|
ssh_password=ssh_passwd,
|
|
ssh_username=ssh_user,
|
|
remote_bind_address=('127.0.0.1', port)
|
|
)
|
|
dbname = kwargs.get('name', '')
|
|
passwd = kwargs.get('password', '')
|
|
user = kwargs.get('user', '')
|
|
charset = kwargs.get('charset', 'utf8')
|
|
|
|
connect_uri = uri_format % (user, passwd, '127.0.0.1', server.local_bind_port, dbname, charset)
|
|
db = create_engine(connect_uri)
|
|
return db
|
|
except Exception as e:
|
|
logger.error('Connect Error happens : %s' % e)
|