项目地址:https://github.com/chengyu2333/mysql2webservice
好像这是个看起来很智障的工具。。
你应该会说webservice直接调用数据库不就行了嘛。。
然鹅就是有这么个需求:
1.数据库的结构和api提供的接口并不是对应关系
2.数据源是第三方提供的,并且是不断更新的
3.在同步的过程中有时会对原始数据做一些处理
所以只好写了个通用的工具┑( ̄Д  ̄)┍
Feature
多线程,出错重试
支持增量更新,增量更新需要满足以下条件:
- 数据库中有递增字段
- webservice提供获取最新一条数据的接口
Tip
- 执行一次脚本只检测并同步一次,可结合crontab或其他任务调度工具
- 一般情况下只需要配置一下config.py文件,不需改动代码
config.py示例
db = {
"host": "localhost",
"user": "root",
"password": "root",
"db_name": "test",
"port": 3366
}
enable_thread = True # 启用线程
thread_pool_size = 1 # 线程池大小
cache_size = 1 # 缓存大小
timeout = 1 # post超时时间
# 出错重试次数
retry_post = 3
retry_mysql = 3
print_log = True # 输出日志到控制台
tables = {
"stas_date_info1": {
"post_url": "http://192.168.1.92:8004/api/date/",
"get_url": "",
# 对比标志,必须是递增字段
"cmp_field": "CTIME", # 用于对比的字段名(数据库)
"cmp_arg": "ctime", # 用于对比的参数名(get的数据)
"cmp_field_second": "SEQ", # 第二判定条件,为空则不启用
"cmp_arg_second": "seq",
"strict": False, # 严格模式将仅同步配置的map中的字段
"lower": True, # 将column转小写,只在非严格模式下有效
# 数据库字段和POST参数映射关系,默认使用column作为post参数
"map": {
# 格式 column:post argument
"CTIME": "ctime",
"SEQ": "seq",
"MTIME": "mtime",
"STARTDATE": "startdate",
"ENDDATE": "enddate",
"ISS_ID": "iss_id",
"DATE_TYPE_CODE":"date_type_code",
"COMCODE":"comcode",
"IF_INTERVAL":"if_interval",
"ISVALID": "isvalid",
"GENIUS_UID": "genius_uid"
}
},
"stas_achieve_report": {
"post_url": "http://192.168.1.92:8004/api/date/",
"get_url": "",
"cmp_field": "CTIME",
"cmp_arg": "ctime",
"cmp_field_second": "",
"cmp_arg_second": "",
"strict": False,
"lower": True,
"map": {
# 如果未启用严格模式,且数据库和post字段完全对应,那么这里不用配置
}
}
}
发表评论
抢沙发~