执行节点
python
import urllib.request
import json
def main(sql: str) -> dict:
api_url = "http://192.168.0.108:35003/execute_query"
headers = {"Content-Type": "application/json"}
data = json.dumps({"sql": sql}).encode("utf-8")
try:
req = urllib.request.Request(api_url, data=data, headers=headers, method="POST")
with urllib.request.urlopen(req) as response:
res_data = json.loads(response.read().decode("utf-8"))
# 转成 JSON 字符串返回
return {"result": json.dumps(res_data)}
except Exception as e:
# 异常信息也返回字符串
return {"result": f"请求接口失败: {str(e)}"}
运行方法:
yum install -y python3
pip3 install flask pymysql
python3 app.py
firewall-cmd --add-port=35003/tcp --permanent
firewall-cmd --reload
python
from flask import Flask, request, jsonify
import pymysql
app = Flask(__name__)
@app.route("/execute_query", methods=['GET', 'POST'])
def execute_query():
data = request.get_json()
sql = data.get("sql", "").strip()
if not sql:
return jsonify({"error": "SQL语句不能为空"}), 400
if not sql.lower().startswith("select"):
return jsonify({"error": "只允许执行SELECT语句"}), 400
try:
# 建立数据库连接
conn = pymysql.connect(
host="192.168.0.108", # 你的数据库IP
user="root",
password="123456",
database="mydb",
cursorclass=pymysql.cursors.DictCursor
)
with conn.cursor() as cursor:
cursor.execute(sql)
result = cursor.fetchall()
conn.close()
return jsonify(result)
except pymysql.Error as e:
return jsonify({"error": f"数据库错误: {str(e)}"}), 500
except Exception as e:
return jsonify({"error": f"未知错误: {str(e)}"}), 500
if __name__ == "__main__":
app.run(host="0.0.0.0", port=35003)