def save(self, request): cdata = self.cleaned_data id = cdata.get('id') envi_id = cdata.get('envi_id') obj = get_object_or_404(SqlOrdersContents, pk=id) context = {} if obj.sql_type in ['DDL', 'DML']: status, msg = check_db_conn_status(obj.host, obj.port) if status: # 只要审核通过后,才能生成执行任务 if obj.progress in ('2', '3', '4', '6'): if SqlOrdersExecTasks.objects.filter( related_id=id).exists(): taskid = SqlOrdersExecTasks.objects.filter( related_id=id).first().taskid if obj.remark == u'数据导出': jump_url = f'/sqlorders/export_tasks/{taskid}' else: jump_url = f'/sqlorders/perform_tasks/{taskid}' context = {'status': 0, 'jump_url': jump_url} else: # 分割SQL,转换成sql列表 # 移除sql头尾的分号; split_sqls = [ sql.strip(';') for sql in sqlparse.split(obj.contents, encoding='utf8') ] taskid = datetime.now().strftime("%Y%m%d%H%M%S%f") # 生成执行任务记录 for sql in split_sqls: SqlOrdersExecTasks.objects.create( uid=request.user.uid, user=obj.proposer, taskid=taskid, host=obj.host, port=obj.port, database=obj.database, sql=sql.strip(';'), sql_type=obj.sql_type, envi_id=envi_id, related_id=id) if obj.remark == u'数据导出': jump_url = f'/sqlorders/export_tasks/{taskid}' else: jump_url = f'/sqlorders/perform_tasks/{taskid}' context = {'status': 0, 'jump_url': jump_url} else: context = {'status': 2, 'msg': '审核未通过或任务已关闭'} else: context = { 'status': 2, 'msg': f'无法连接到数据库,请联系系统管理员\n主机: {obj.host}\n端口: {obj.port}' } elif obj.sql_type in ['OPS']: context = {'status': 2, 'msg': '运维工单无法生成执行任务,请手动执行'} return context
def query(self): cdata = self.cleaned_data schema = cdata['schema'] host, port, schema = schema.split(',') status, msg = check_db_conn_status(host, port) if status: table_list = GetTableInfo(host, port, schema).get_column_info() context = {'status': 0, 'msg': '', 'data': table_list} else: context = {'status': 2, 'msg': f'无法连接到数据库,请联系管理员,\n主机: {host}\n端口: {port}'} return context
def save(self, request): cdata = self.cleaned_data id = cdata.get('id') envi_id = cdata.get('envi_id') obj = get_object_or_404(SqlOrdersContents, pk=id) status, msg = check_db_conn_status(obj.host, obj.port) if status: # 只要审核通过后,才能生成执行任务 if obj.progress in ('2', '3', '4', '6'): if SqlOrdersExecTasks.objects.filter(related_id=id).exists(): taskid = SqlOrdersExecTasks.objects.filter(related_id=id).first().taskid context = {'status': 0, 'jump_url': f'/sqlorders/perform_tasks/{taskid}'} else: host = obj.host database = obj.database port = obj.port sql_content = obj.contents # 实例化 incep_audit = InceptionSqlApi(host, port, database, sql_content, request.user.username) # 对OSC执行的SQL生成sqlsha1 result = incep_audit.make_sqlsha1() taskid = datetime.now().strftime("%Y%m%d%H%M%S%f") # 生成执行任务记录 for row in result: SqlOrdersExecTasks.objects.create( uid=request.user.uid, user=obj.proposer, taskid=taskid, host=host, port=port, database=database, sql=row['SQL'], sqlsha1=row['sqlsha1'], affected_row=row['Affected_rows'], sql_type=obj.sql_type, envi_id=envi_id, related_id=id ) context = {'status': 0, 'jump_url': f'/sqlorders/perform_tasks/{taskid}'} else: context = {'status': 2, 'msg': '审核未通过或任务已关闭'} else: context = {'status': 2, 'msg': f'无法连接到数据库,请联系系统管理员\n主机: {obj.host}\n端口: {obj.port}'} return context