import copy
from core import argv
#import pymysql, sqlite3, pymssql ... # 动态加载: 

def edb(key):
    cfgs = config.init()
    cdb = dict(copy.deepcopy(cfgs['cdb']), **cfgs[key])
    return dbm(cdb)

class dbm:
    def __init__(self, cfgs={}):
        cfgs = cfgs if cfgs else argv.cfgs['cdb'] #g.cdb
        self.cfgs = cfgs
        self.dbcon()

    def dbcur_comm(self, cfgs):
        drive = __import__(cfgs['type'])
        host = cfgs['host']; user = cfgs['user']; pwd = cfgs['pass']; name = cfgs['name']
        self.con = drive.connect(host=host, user=user, password=pwd, database=name, charset="utf8")
        self.cur = self.con.cursor(cursor=drive.cursors.DictCursor)

    def dbcur_sqlite3(self, cfgs):
        self.con = __import__('sqlite3').connect(cfgs['name'])
        def cur_dict(cursor, row): 
            d = {} 
            for idx, col in enumerate(cursor.description): 
                d[col[0]] = row[idx] 
            return d
        self.con.row_factory = cur_dict
        self.cur = self.con.cursor()

    def dbcon(self):
        cfgs = self.cfgs
        func = 'dbcur_' + cfgs['type']
        if func in dir(self):
            method = getattr(self, func) 
            method(cfgs)
        else:
           self.dbcur_comm(cfgs)
        if not self.cur:
            print('Database Error!')
            #raise(NameError, "Database Error!")

    def close(self):
        self.cur.close()
        self.con.close()

    def table(self, tbname, sql=1):
        pre = self.cfgs['tbpre']
        fix = self.cfgs['tbfix']
        if sql: # {base_catalog}
            return tbname.replace('{', pre).replace('}', fix)
        else:
            return pre + tbname + fix

    def get(self, sql, parms=(), re=None): # re = 1,n,None
        cur = self.cur
        cur.execute(self.table(sql), parms)
        if not re:
            res = cur.fetchall()
        elif re==1:
            res = cur.fetchone()
        else:
            res = cur.fetchmany(re)
        return res

    def exe(self, sql, parms=(), mod=None):
        cur = self.cur
        if type(parms) == list :
            res = cur.executemany(self.table(sql), parms)
        else:
            res = cur.execute(self.table(sql), parms)
        self.con.commit()
        return res

    def script(self, sql, parms=''):
        self.exe(sql)





其中cdb 配置片段为:


[cdb]
type = pymysql
host = localhost
name = txext_main
port = 3306
user = peace
pass = 123456
tbpre = 
tbfix = _ys
# type : pymysql, sqlite3, pymssql
# name : txmao_main, 
# 127.0.0.1, localhost, 


更多参考:微爬(Wepy)

http://imcat.txjia.com/chn.php?topic.2018-3j-g9b1