Easy Connection, A module for all db!
Project description
[TOC]
介绍
数据库模块:集成我们日常使用数据库,将包含如下内容:redis(同步,异步,集群),mysql(同步,异步,集群),elastic_search(同步集群,异步集群)
目前实现:DbFactory框架,redis 同步连接,redis 集群连接, mysql 同步连接,kafka 连接功能
为什么需要这个模块:
1. 这个模块里面封装了工程过程中经常遇到的问题的自动解决方案,提高系统稳定性,稳定性,稳定性! 2. 可能,真的很优雅。
好的功能
1. 非常方便的实例化数据库连接类 2. 自动单例模式,以及单例控制 3. 新增 慢查询 告警 功能:查询超过设定时间,会在日志中告警 4. 支持 request_id 写入日志,方便 debug 时查找上下文 5. 支持 数据库连接 异常 重连机制 6. 方便开发,拓展新数据库客户端非常简单
安装方法
pip install DbFactory
参数介绍
DbFactory 控制参数
详细参数可以直接点开 DbFactory 查看
使用方法
import logging
logging.basicConfig(level=logging.DEBUG)
logging.info('nice')
from DbFactory import DbFactory
# ----------- 创建 mysql 数据库 ------------
# 如果未选择参数,则使用默认。db_type 默认 mysql
mysql_client = DbFactory(log=logging, db_type="mysql", port=53307, password='123456', db_name='database_name')
# 显示单例名称
print("_singleton_sign:", mysql_client._singleton_sign)
# 调用 select 方法
print(mysql_client.select("select * from appinfo"))
# 切换数据库
mysql_client.switch_db("database_name_2")
# 调用 select 方法
print(mysql_client.select("select * from appinfo"))
# 如果一次连接多个数据库,也可以采用多个单例的方式。
# ---------------- 多个单例 -----------------
mysql_client1 = DbFactory(log=logging, db_type="mysql", port=53307, password='123456', db_name='database_name')
print("_singleton_sign1:", mysql_client1._singleton_sign)
mysql_client2 = DbFactory(log=logging, db_type="mysql", port=53307, password='123456', db_name='database_name', singleton_num=2)
print("_singleton_sign2:", mysql_client2._singleton_sign)
# ----------- 创建 redis 数据库 ------------
redis_client = DbFactory(log=logging, db_type="redis", port=16379, password='123456')
# 调用set方法
redis_client.set("nice", "友友快@我!")
# 调用get方法
print(redis_client.get("nice"))
# 切换数据库
redis_client.switch_db(1)
redis_client.set("nice", "友友快切换!")
print(redis_client.get("nice"))
# ----------- 创建 redis cluster 数据库 ------------
startup_nodes = [{"host": "10.100.16.170", "port": 6381},
{"host": "10.100.16.170", "port": 6382},
{"host": "10.100.16.170", "port": 6383}]
redis_cluster_client = DbFactory(log=logging, db_type="redis_cluster", startup_nodes=startup_nodes, password='123456')
redis_cluster_client.set("nice", "友友集群快@我!")
print(redis_cluster_client.get("nice"))
# ----------- 特殊情况,直接使用 原始的db,不推荐。(现成封装好的ORM除外,例如 sqlachemy) ------------
print(mysql_client.atom_db.select("select * from appinfo"))
print(redis_client.atom_db.get("nice"))
print(redis_cluster_client.atom_db.get("nice"))
参数说明
详见:db_factory.py
开发方法
所有方法需要相应类去具体实现:(新增数据库命名规则)
mysql: mysql_client.py kafka: kafka_client.py redis: redis_client.py redis_cluster: redis_cluster_client.py
新增新的数据库时,例子如下:(拿 redis_cluster 为例子)
调用名称 redis_cluster ,用在创建数据库时,db_type 参数
DbFactory/client 文件夹内部,新建 redis_cluster_client.py 文件
新建类名 RedisClusterClient
类内部 约定实现如下方法: (具体可以参考 redis_client.py 以及,mysql_client.py)
# 这个方法建立反射,DbFactory 类能够直接调用到 RedisClusterClient 类中 封装的方法。
@cost_time(warning_time=config.get("REDIS_WARNING_TIME", 5))
def generation_func(self, method, **kwargs):
def action():
return getattr(self.client__, method)(**kwargs)
return action()
注意事项
部分方法,不太常见,所以未封装提示功能,但不影响使用,如果需要,可以自行添加提示。
mysql在多线程时,使用单例模式,可能出现 connection reset by peer,因为多次连接一个服务器导致。 此时关闭单例模式即可。(或者,每个线程,创建一个单例)
依赖列表以及部分版本信息
已支持依赖 'pymysql==0.10.0', 'elasticsearch==5.3.0', 'redis==3.5.3', 'redis-py-cluster==2.1.0', 'DBUtils==2.0', 'kafka==1.3.5', 待支持依赖 aredis (异步模块)1.1.7 SQLAlchemy (以及封装文件) marshell 序列化,反序列化 elasticsearch (同步) elasticsearch_async (异步)
版本说明
1.0.9 版本
1 redis集群 优化参数,支持 host port参数 2 增加kafka支持 3 单例模式,默认关闭,需要手动打开
1.0.8 版本
1 忘了自己具体做什么了,主要是优化内部结构吧。
1.0.7 版本
1 版本稳定
更早 版本
2020/8/31: DB工厂类创建 2020/9/1: redis_client 方法使用反射 2020/9/2: DB工厂类增加自动反射 2020/9/7: 1 DbFactory 取消配置文件,改为New对象时,通过参数创建。 2 抽象基础db,优化 DbFactory 结构 3 优化 DbFactory 参数解析部分,使得支持不同数据库参数传入。 4 增加 自定义 超时装饰器。
后期版本规划
1.0.10 版本
redis 增加本地缓存功能? 2 关闭单例模式时,返回惰性函数,建议待补充
todo
考虑,flask 集成? 考虑,tornado 集成? todo 注意,单例模式,在 tornado 多线程模式下,可能失效?
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for DbFactory-1.0.9-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2fd9cf3044b2329c90e59bb663cca876f38eb51590a03d60fd155b7f6957cce4 |
|
MD5 | 2b75c657000e67b03f8d77a64b5c2e0b |
|
BLAKE2b-256 | ce478f88642669c3ab7b7f11e725d4907360a4b5b96add0d9394ddfbe33ac6a3 |