Python 生成和读取数据库INI配置

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#    @version : 0.0.1
#    @File    : DBConfig.py
#    @Time    : 2018/8/30 0030 下午 2:46
#    @Site    : 
#    @Software: PyCharm
#    @Author  : singebogo
#    @Author_email: singbogo@163.com
#    @description: 


# 主要功能:
#       1、生成ini文件
#             1、定义数据源
#             2、解析数据
#             3、生成ini文件
#       2、读取ini文件
#             1、读取文件
#             2、获取数据,key-value

#
#             DBconfig
#          /\              /\
#          |               |
#          |               |
#      DBConfigRead    DBConfigSet
#
# 基本数据定义:
#             enum dbtypes {}
#
# DBconfig:  抽象类
#
#         1、属性: dbtype、host、user、password、database、charset
#         2、ABs set get map(key-value)
#         3、Mkdir DbConfig

import os

from new_frame.api.filegener.path.proj import ProjPath
from new_frame.util.STL.dictmaintain import MapCommon,DEFAULTTARGETTYPE
from new_frame.util.logutil.log import logger
from new_frame.util.config.ini import IniConfig


dbConfigName =  'DBConfig.ini'

#---------------------------------------------------------------------------
#   Level related stuff
#---------------------------------------------------------------------------
#
# Default levels and level names, these can be replaced with any positive set
# of values having corresponding names. There is a pseudo-level, NOTSET, which
# is only really there as a lower limit for user-defined levels. Handlers and
# loggers are initialized with NOTSET so that they will log all messages, even
# at user-defined levels.
#
mysql = 0
oracle = 1
sqlserver = 2
access = 3
db2 = 4
sybase = 5
foxbase = 6
# 非关系型数据库
redis = 7
mongodb = 8

DBTYPES = {
    mysql : 'mysql',
    oracle : 'oracle',
    sqlserver : 'sqlserver',
    access : 'access',
    db2 : 'db2',
    sybase : 'sybase',
    foxbase: 'foxbase',
    redis: 'redis',
    mongodb: 'mongodb',
    'mysql': mysql,
    'oracle': oracle,
    'sqlserver': sqlserver,
    'access': access,
    'db2': db2,
    'sybase': sybase,
    'foxbase': foxbase,
    'redis': redis,
    'mongodb': mongodb,
}

targettype =  'dict'

class DBConfig(object):

    configdict = {'dbtype':'','host':'','user' :'','port': '','password':'','database':'','charset':''}

    def __init__(self):
        self.__mkConfigDir()

    def __mkConfigDir(self):
        '''
        创建db配置文件
        @param filename:  文件路径
        @return: True:创建成功 False:创建失败
        '''
        filename = DBConfig.getDbConfigDir()
        print(filename)
        if filename is not None:
            filebase = FileBase(filename)
            if not filebase.isExist():
                return filebase.fileCreate()
        return False

    @staticmethod
    def getDbConfigDir():
        '''
        静态方法,获取配置文件路径
        @return: 返回文件路径
        '''
        configdir = ProjPath.getConfigFile()
        if dbConfigName is not None:
          return os.path.join(configdir, dbConfigName)


from new_frame.api.filegener.fileoperator.filebase import FileBase

class DBConfigRead(DBConfig):

    configfilepath = ''

    def __new__(cls, *args, **kwargs):
        if len(args) == 0:
            filepath = DBConfigRead.getDbConfigDir()
            if not FileBase(filepath).isExist():
                DBConfigRead.configfilepath = filepath
                return object.__new__(cls)
            else:
                logger.error('Config File not exits ' + filepath)
                return
        elif len(args) == 1:
            print FileBase(args[0]).isExist()
            if FileBase(args[0]).isExist():
                DBConfigRead.configfilepath = args[0]
                return object.__new__(cls)
            else:
                logger.error('Config File not exits ' + args[0])
                return
        else:
            return

    def __init__(self, path):
        super(DBConfigRead, self).__init__()

    def readInI(self):
        inicfg = IniConfig(DBConfigRead.configfilepath)
        return inicfg.getAll()

'''
        [mysql]
        dbtype = MySql
        host = 127.0.0.1
        port = 3306
        user = root
        password = 123456
        database = test
        charset = utf8
'''

# {'mysql': {'database': 'selling_expenses_dev', 'dbtype': 'mysql', 'charset': 'utf8', 'host': '127.0.0.1', 'user': 'root', 'password': '123456', 'port': '3306'}}

# *args  **kwargs
class DBConfigSet(DBConfig):

    def __init__(self):
        DBConfig.configdict['dbtype'] = 'mysql'
        DBConfig.configdict['host'] = "127.0.0.1"
        DBConfig.configdict['port'] = 3306
        DBConfig.configdict['user'] = "root"
        DBConfig.configdict['password'] = "123456"
        DBConfig.configdict['database'] = "test"
        DBConfig.configdict['charset'] = "utf8"
        super(DBConfigSet, self).__init__()

    def setInI(self):
        mapcommon = MapCommon(type(DBTYPES).__name__, DEFAULTTARGETTYPE, DBTYPES)
        if mapcommon is None:
            return
        if DBConfig.configdict['dbtype'] == mapcommon.getKeyName(mapcommon.getKeyName(DBConfig.configdict['dbtype'])):
            inicfg = IniConfig(DBConfig.getDbConfigDir())
            root = mapcommon.getKeyName(mapcommon.getKeyName(DBConfig.configdict['dbtype']))
            inicfg.add(root)
            for key, value in DBConfig.configdict.items():
                inicfg.add(root, key, value)

if __name__ == '__main__':
    # print (type(DBTYPES).__name__ == 'dict')
    # print (isinstance(DBTYPES, dict))
    # #  传入的是类型
    # AA = MapCommon(type(DBTYPES).__name__,  targettype, DBTYPES )
    # print(AA)
    # print(AA.getKeyName("mongodb"))
    # BB = 10
    # AA.addKeylName(BB, "CC")
    # AA.addKeylName("CC", BB)
    # DBTYPES = AA.getDict()
    # print(DBTYPES)
    # # print (AA.checkKey(key='VV'))
    # dbconfig = DBConfig()
    # print (dbconfig)
    # dbset = DBConfigSet()
    # print(dbset.setInI())

    path = "D:\\pyt\\new_frame\\config\\DBConfig.ini"
    dbread = DBConfigRead(path)
    print (dbread.readInI())

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值