项目没有接口,只提供数据库,技术又没有时间排期,又不想使用 RPA 产生额外的费用,如何进行数据对接呢。那么今天这套方案来给你解忧。明道云如何设置链接自身数据库,读取数据写入到明道云下系统内呢?今天手把手教学模式,一一拆解步骤。 第一步:安装明道私有部署 步骤参考这里-->点击产看 安装步骤 [图片] 第二步:依赖库持久化并扩展依赖库 持久化依赖库: 步骤参考这里-->(点击查看步骤) [图片] 安装对应的扩展库 链接 MySQL 请安装 pymysql 扩展库: : docker exec -t $(docker ps | grep community | awk '{print $1}') bash -c 'pip3 install --target=/usr/local/lib/python3.6/site-packages/ pymysql' 链接 sqlservice 请安装 pymssql 扩展库; : docker exec -t $(docker ps | grep community | awk '{print $1}') bash -c 'pip3 install --target=/usr/local/lib/python3.6/site-packages/ pymssql' Oracle Linux 连接配置 可以参考下这里-->(点击查看) 验证是否安装完成后可在宿主机目录 /data/mingdao/script/volume/command/package/python-3.6/site-packages/ 中进行查看。 第三步:应用设计 基础信息级同步任务表 数据库配置表及设置 自定义动作获取工作表信息 [图片] [图片] 数据库表及配置动作 获取字段,以及创建自动任务 [图片] [图片] 字段表 [图片] 设计业务流及自动化流程 数据库连接是统一的,中间执行不同的脚本,所以抽出来做一个 pbp 业务流,提高复用率。 [图片] MySQL 连接脚本如下 import pymysql import json output = {} output['result'] = '' # 打开数据库连接 try: db = pymysql.connect(host=input['host'], user=input['username'], password=input['passwd'], port=int(input['port'])) # 使用 cursor() 方法创建一个游标对象 cursor db.select_db(input['db']) cursor = db.cursor() # 使用 execute() 方法执行 SQL 查询 output['sql'] = input['sqltext'] cursor.execute(input['sqltext']) cols=cursor.description # 使用 fetchone() 方法获取单条数据. datas = cursor.fetchall() allop=[] for data in datas: i = 0 op= {} for col in cols: op[cols[cols.index(col)][i]] =str(data[cols.index(col)]) i=i+1 allop.append(op) output['data'] = json.dumps(allop, ensure_ascii=False) #print(output) # 关闭数据库连接 db.close() output['code'] = 0 output['msg'] = '连接成功' except Exception as e: output['code'] = 1 output['msg'] = '连接失败:{}'.format(e) 获取库下面所有的表 select table_name tableName ,ifnull(TABLE_COMMENT,'') as tabledesc,create_time createTime from information_schema.tables where table_schema ='数据库库名' order by create_time desc 获取表的列信息 select column_name as '列名',data_type as '字段类型',column_comment as '字段注释' ,column_key as '是否主键',is_nullable as '是否允许为空',column_default as '默认值' from information_schema.columns where table_schema='数据库库名' and table_name='表名' SQLService 封装链接脚本如下: import pymssql import json import time class MyEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, bytes): return str(obj, encoding='utf-8') return json.JSONEncoder.default(self, obj) output = {} # 打开数据库连接 # 建议改写下里面添加事务 本章只是简单的案例 try: db = pymssql.connect(host=input['host'], user=input['username'], password=input['passwd'], port=int(input['port'])) # 使用 cursor() 方法创建一个游标对象 cursor cursor = db.cursor() sql ="use "+input["db"]+"; "+ input['sqltext'] output['sql'] = sql #print(sql) cursor.execute(sql) cols=cursor.description # 使用 fetchone() 方法获取单条数据. datas = cursor.fetchall() allop=[] for data in datas: i = 0 op= {} for col in cols: op[cols[cols.index(col)][i]] =str(data[cols.index(col)]) i=i+1 allop.append(op) output['data'] = json.dumps(allop, ensure_ascii=False) #print(output) # 关闭数据库连接 db.close() output['code'] = 0 output['msg'] = '连接成功' except Exception as e: output['code'] = 1 output['msg'] = '连接失败:{}'.format(e) if output['code'] == 1: pass 获取库下面所有的表 SELECT name tableName,'' tabledesc,crdate createTime FROM 替换为库名..SYSOBJECTS WHERE XTYPE='U' ORDER BY crdate 获取表的列信息 use 替换为库名 ; SELECT A.NAME '列名', CASE WHEN COLUMNPROPERTY( A.ID,A.NAME, 'ISIDENTITY ')=1 THEN 'YES' ELSE '' END '标识', CASE WHEN EXISTS(SELECT 1 FROM SYSOBJECTS WHERE XTYPE= 'PK ' AND PARENT_OBJ=A.ID AND NAME IN ( SELECT NAME FROM SYSINDEXES WHERE INDID IN( SELECT INDID FROM SYSINDEXKEYS WHERE ID = A.ID AND COLID=A.COLID))) THEN 'PRI' ELSE '' END '是否主键', B.NAME '字段类型', A.LENGTH '占用位元组数', COLUMNPROPERTY(A.ID,A.NAME, 'PRECISION ') '长度', ISNULL(COLUMNPROPERTY(A.ID,A.NAME, 'SCALE '),0) '小数位', CASE WHEN A.ISNULLABLE=1 THEN 'YES' ELSE '' END '是否允许为空', ISNULL(E.TEXT, ' ') '默认值',CONVERT(VARCHAR(50),ISNULL(G.[VALUE], '')) '字段注释' FROM SYSCOLUMNS A LEFT JOIN SYSTYPES B ON A.XUSERTYPE=B.XUSERTYPE INNER JOIN SYSOBJECTS D ON A.ID=D.ID AND D.XTYPE= 'U ' AND D.NAME <> 'DTPROPERTIES ' LEFT JOIN SYSCOMMENTS E ON A.CDEFAULT=E.ID LEFT JOIN sys.extended_properties G ON A.ID=G.major_id AND A.COLID=G.minor_id LEFT JOIN sys.extended_properties F ON D.ID=F.major_id AND F.minor_id=0 where D.NAME='替换为表名' ORDER BY A.ID,A.COLORDER 其他业务流程图 获取字段 ,创建自动任务。 [图片] [图片] [图片] 对接其他系统或者项目对接的时候日志是不可缺少的,能够快速定位错误,记得加上哦。 MySQL 同步获取演示: [图片] [图片] SQLService 同步获演示: [图片] 最后业务部门测试数据也已经写入工作表了整体对接 OK 已完成,小伙伴们快快尝试吧














目前公有云是 10.2;这个需求安排在了 10.4
请问张总, 明道云 新建表单 API 不支持日期字段,请问什么时候能支持?
你好,就是这个获取到的数据库字段的类型,在明道云系统中表字段类型怎么去对应,在自动创建表的时候要怎么去处理呢,用条件去判断吗?觉得会创建很多判断条件。![image.png]()
公有云 8.0;私有部署 4.0.0 版本就开始支持了
目前公有云是 10.1 版本 私有部署最新是 5.0.2 版本
这个在哪个版本呢?
好的,谢谢 👍
完全可以,应用 AP 都有的
![image.png]()
可不可以直接通过获取到的字段直接创建表
👍 感谢
代码块 python。
这个脚本是再哪里使用的
SaaS 版啥时候优化一下数据库中间件,上游厂家不给开 cdc,只能几秒钟读取一次
哎,用了 sql2019 版本测试通过了
都对的,这个跟数据库版本有关系吗,我的是 2008 版的
1.确认下与数据的地址通不通 以及端口是否开放了
2.就是数据配置管理里面 是否开启允许远程链接
代码跟你一样,为啥会报错:连接失败:(20002, b'DB-Lib error message 20002, severity 9:\nAdaptive Server connection failed (192.168.3.9)\nDB-Lib error message 20002, severity 9:\nAdaptive Server connection failed (192.168.3.9)\n')
我还是希望作者能提供可供我们使用的示例工程下载。
SQLService 的脚本 中文输出乱码
[{"tableName": "ImgGbjmshd", "tabledesc": "b'\xe9\x80\x81\xe8\xb4\xa7\xe5\x8d\x95\xe5\xad\x98\xe6\xa1\xa3'", "createTime": "2022-01-11 11:13:41.843000"}]
非常感谢,连接测试成功
添加 SQLService 链接脚本
添加 SQLService 演示示例
密码字段最好有**甚至加密,否则数据库密码直接暴露出来感觉有风险。
另外,这个应用能不能导出一下这个应用?我们可以学习一下
第一不是数据字段都需要同步回来的,这里支持自己勾选字段进行获取。第二拿到明道的工作表与字段匹配,通过接口新增或者修改,减少人工工作流界面还要每一种表配一个流程。实现简版集简云效果,后面走配置方案会放到下篇文章讲解的
请教下,第三步中的 2、3 定义表结构和字段的目的是什么?