2025年基于小米SAOR实现SQL自助优化接口

基于小米SAOR实现SQL自助优化接口usr bin python3 coding UTF 8 import pymysql import os import json import time import logging import subprocess from connect db forbatch import connect mysql from flask cors

大家好,我是讯享网,很高兴认识大家。
#!/usr/bin/python3
# -*- coding: UTF-8 -*-
import pymysql
import os
import json
import time
import logging
import subprocess
from connect_db_forbatch import connect_mysql
from flask_cors import *
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
from flask import Flask,request,jsonify
app = Flask(__name__)

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
logdate = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
log_path = '/data/mysql/logs/'
log_name = log_path + logdate + '.log'
logfile = log_name
fh = logging.FileHandler(logfile, mode='w')
fh.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
fh.setFormatter(formatter)
logger.addHandler(fh)

@app.route('/optimizesql/', methods=['POST'])
def soar():
    try:
        if not request.data:  #检测是否有数据
            return ('fail')
        params= request.data.decode('utf-8')
        prams = json.loads(params)
        clustername = prams['clustername']
        dbname = prams['dbname']
        sql = prams['sql'].replace('\\','').replace('`','\`')
        #获取mysql实例的元数据信息
        get_ip = "select ip,port from mysql_instance where clustername='%s'" %(clustername)
        host = connect_mysql('127.0.0.1', 33071, 'dbname', 'tablename').select_metadata(get_ip)
        ip = host[0][0]
        port = host[0][1]
        html_cmd = "soar -online-dsn=\"user:password@%s:%s/%s\" -test-dsn=\"user:password@host:port/optimizesql\" -query=\"%s\"  -report-type markdown -log-output=/data/ansible/logs/optimizesql.log" %(ip,port,dbname,sql)
        (status, content) = subprocess.getstatusoutput(html_cmd)
        if status != 0 :
            content = "analyze failed"
        return jsonify(content)
    except Exception as err:
        logger.error('%s',err, exc_info=True)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5590)

讯享网
小讯
上一篇 2025-03-08 20:22
下一篇 2025-03-11 10:04

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/24007.html