关于简道云表单收集数据的去重(二)
问题:
在简道表表单收集数据的过程中,前文曾经写过,用mysql数据库+webhook的方法,进行去重,并保留最新一条数据的方法。
这段时间,我又进行了更新。优点:
1.不用mysql数据库
2.写好代码,一个地址调用,可以解决所有类似的问题。
方法:
1.在收集数据的表单中,建立一个唯值字段。
2.对这个唯一值字段命名别名为:weiyizhi
代码:
其中用到的类和函数,见简道云V5版API的python类
api_key = "***********" # 简道云API路由路径,这个路径为http://192.*.*.*:*/baoliuweiyizhi/ @jiandaoyun.route('/baoliuweiyizhi/', methods = ['POST']) # 这一段接收数据的语句不用修改 def hello_world(): # 从简道云表单根据A表单动作触发获取值 sj = json.loads(request.data) op = sj['op'] data = sj['data'] if op == "data_test": # 测试触发的这个语句 print("测试成功") return '200' else: # 多线程进行数据处理程序 threading.Thread(target = baoliuweiyizhi, args = (op, data,)).start() return 'success', 200 # 保留最新唯一值 def baoliuweiyizhi(self, op, data): api = APIUtils(api_key) appId = data['appId'] entryId = data['entryId'] weiyizhi = data["weiyizhi"] data_filter = { "rel": "and", "cond": [{ "field": "weiyizhi", "method": "eq", "value": weiyizhi }] } try: dataId_dic = api.get_all_dataId(appId,entryId,data_filter) print("dataId_dic:",dataId_dic) dataId_dic = dataId_dic[:-1] api.batch_delete_data(appId,entryId,dataId_dic) except: pass设置:
原理:
每次收到推送的数据,读取表单的appId,entryId和字段“weiyizhi”,再以“weiyizhi"为搜索条件,进行搜索,得到所有dataid,形成一个list,去掉最新的dataid,根据dataids删除数据。
优点:
做好后,不用修改代码了,直接在表单前端进行设置就可以。
