# dbcfg **Repository Path**: chenc224/dbcfg ## Basic Information - **Project Name**: dbcfg - **Description**: 把数据库连接信息独立出来,放在专门的配置目录下。 这样代码中没有服务器地址、用户、密码等信息,可以提高安全性。 代码和配置信息分开,也方便后期更改数据库连接信息(包括密码等)。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-02-18 - **Last Updated**: 2026-04-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # dbcfg介绍 ## 项目目的 把数据库连接信息独立出来,放在一个专用的配置目录下。可以提供以下好处: * 代码中不再包含连接信息,方便做到开发和运维分离。 * 代码中没有连接信息,也提高了安全性,避免不小心分发出去的代码泄露了秘密。 * 后续数据库变换地址、连接方式、修改密码不再需要调整源代码,直接修改配置即可。 * 同一份源代码,无须变动,即可适应生产、测试环境。 * 数据库定期修改密码时,仅需要改动少量配置文件。 ## 一些特性 * 支持不同的语言,初期支持python、c、lua等 ## 设计思路 在特定目录下依次寻找数据文件。每个设置一个文件,类似oa.cfg这样,以.cfg结尾,使用时去掉.cfg的部分做为连接名使用。 数据目录在linux平台下搜索顺序是: * ~/.dbcfg.d * /etc/dbcfg.d * /etc/dbconn.config.d (兼容老的代码用的,后续很可能会取消,新的配置文件不建议放这里) 在windows平台下搜索顺序是: * home目录下的.dbcfg.d * 当前盘:/etc/dbcfg.d * 当前盘:/etc/dbconn.config.d (兼容老的代码用的,后续很可能会取消,新的配置文件不建议放这里) 设置文件里指定连接何种数据库,以及连接数据所需要的一些信息(不同数据库不相同)。 提供各语言的库,可以读取配置文件,甚至直接根据连接名和配置文件连接数据库。 ## 数据文件格式 以json格式存放信息。样例如下: ``` [ { "name":"一个配置文件里可以设置多个连接,用名字区分,只有一个连接时,可以忽略名字", "db":"如tds 指定数据库类型", "python":{ "import":"python需要导入的包名,未设置则根据db名称使用默认导入模块", }, "lua":{ "require":"导入的模块名称", }, "t":[ "连接参数,根据不同数据库不同,如oracle库可以填写用户名/密码@数据库这样的内容" ] "d":{ "server":"服务器地址", "database":"库名称", "user":"如sa 用户名称", "password":"对应的密码", "port":1433, "readonly":true } } ] ``` 其中t是一个字符串数组,d是一个字典,这些内容的格式根据不同的数据库、驱动程序、连接方式甚至语言的不同有差异,暂时没考虑自动适应这些情况,而是根据语言的不同,提供了读入数据的快捷方式,如何使用这些数据甚至于如何在配置文件中设置数据,可以由用户灵活掌握。比如我用python比较多,d的格式实际上就是参照python相应的数据库驱动需要的字典来确定的,这样可以直接使用字典做参数来连接到数据库。 后续考虑设置d的标准设置方法,针对各语言设置默认的转换方法,这样不同的数据库、语言可以使用基本类似的设置。特殊情况可以在配置里设置转换比如在python字典里直接设置python需要的格式或者转换设置。 如果使用python,建议设置python中的import,如果不设置,根据以下转换表导入包 |db设置|导入包名| |:--|:--| |oracle|cx_Oracle| |mysql|pymysql| |sqlserver|pytds| |tds|pytds| |opengauss|py_opengauss.driver.dbapi20| |dm|dmPython| 示例是一个tds(mssql)的配置示例。 python会在connect时将t和d的内容作为参数传入,所以可以根据具体的包的connect的参数要求填写t和d的内容。 c的库则会把这些参数读入供后续程序使用,c目录下有库以及示例代码可以参考使用。 类似mediawiki机器人也需要用户名、密码这样的配置数据,所以它虽然不严格是数据库,然而实际上也可以使用这个工具来配置。以下为示例配置 ``` [ { "name":"一个配置文件里可以设置多个,用名字区分,只有一个时,可以不用设置", "db":"mediawiki", "d":{ "server": "wiki服务器地址", "scheme": "https或者http", "path": "路径,如 /mediawiki/", "user":"机器人用户名称", "password":"对应的密码", } } ] ``` # python应用 ## 一些特性 * 包含dbcfg命令,可以读取配置文件,测试配置文件 * 提供样例代码供程序员快速上手 ## 安装 使用 ``` pip install dbcfg ``` 即可下载安装 pip安装之后可以直接运行dbcfg测试,命令行参数为数据文件名(不用路径,也不需要扩展名) ## dbcfg 命令行功能 直接执行dbcfg不带参数,会显示可用的选项和参数说明。 ## 在python程序里使用dbcfg 代码样例如下 ``` import dbcfg dbc=dbcfg.use("xxx",ehm=1) db=dbc.connect() #返回数据库连接 ``` ehm参数用于控制有问题、有异常时如何处理 |ehm|处理细节| |:--|:--| |0|默认值,不特殊处理。| |1|如果调用的返回码为非0,则打印rtinfo的内容| |2|如果调用的返回码为非0,则触发异常| 更详细的例子可以参考https://gitee.com/chenc224/dbcfg/blob/master/python/script/dbcfgtool.py