缓存上下文,表结构添加

This commit is contained in:
yujj128
2025-10-13 18:18:58 +08:00
parent 73cbc55d74
commit be0bc661e2
4 changed files with 371 additions and 24 deletions

View File

@@ -1,5 +1,9 @@
import copy
from email.policy import default
import logging
from functools import wraps
from Demos.mmapfile_demo import page_size
import util.utils
from logging_config import LOGGING_CONFIG
@@ -102,8 +106,9 @@ def generate_sql_2():
return jsonify({"type": "error", "error": "No question provided"})
try:
id = cache.generate_id(question=question)
user_id = request.args.get("user_id")
logger.info(f"Generate sql for {question}")
data = vn.generate_sql_2(question=question)
data = vn.generate_sql_2(question=question, cache=cache, user_id=user_id)
logger.info("Generate sql result is {0}".format(data))
data['id'] = id
sql = data["resp"]["sql"]
@@ -116,21 +121,56 @@ def generate_sql_2():
logger.error(f"generate sql failed:{e}")
return jsonify({"type": "error", "error": str(e)})
def session_save(func):
@wraps(func)
def wrapper(*args, **kwargs):
id=request.args.get("id")
user_id = request.args.get("user_id")
logger.info(f" id: {id},user_id: {user_id}")
result = func(*args, **kwargs)
datas=[]
session_len = int(config("SESSION_LENGTH", default=2))
if cache.exists(id=user_id, field="data"):
datas = copy.deepcopy(cache.get(id=user_id, field="data"))
data = {
"id": id,
"question":cache.get(id=id, field="question"),
"sql":cache.get(id=id, field="sql")
}
datas.append(data)
logger.info("datas is {0}".format(datas))
if len(datas) > session_len and session_len > 0:
datas=datas[-session_len:]
# 删除id对应的所有缓存值,因为已经run_sql完毕改用user_id保存为上下文
cache.delete(id=id, field="question")
cache.set(id=user_id, field="data", value=copy.deepcopy(datas))
logger.info(f" user data {cache.get(user_id, field='data')}")
return result
return wrapper
@app.flask_app.route("/yj_sqlbot/api/v0/run_sql_2", methods=["GET"])
@session_save
@app.requires_cache(["sql"])
def run_sql_2(id: str, sql: str, page_num=None, page_size=None):
def run_sql_2(id: str, sql: str):
"""
Run SQL
---
parameters:
- name: user
- name: user_id
in: query
required: true
- name: id
in: query|body
type: string
required: true
- name: page_size
in: query
-name: page_num
in: query
responses:
200:
schema:
@@ -158,15 +198,12 @@ def run_sql_2(id: str, sql: str, page_num=None, page_size=None):
# count_sql = f"SELECT COUNT(*) AS total_count FROM ({sql}) AS subquery"
# df_count = vn.run_sql(count_sql)
# total_count = df_count[0]["total_count"] if df_count is not None else 0
# print(df_count,"is type",type(df_count))
# total_count = df_count.to_dict(orient="records")[0]["total_count"]
# logger.info("Total count is {0}".format(total_count))
df = vn.run_sql(sql=sql)
logger.info("")
app.cache.set(id=id, field="df", value=df)
result = df.to_dict(orient='records')
logger.info("df ---------------{0} {1}".format(result,type(result)))
# result = util.utils.deal_result(data=result)
return jsonify(
{
"type": "success",
@@ -180,7 +217,6 @@ def run_sql_2(id: str, sql: str, page_num=None, page_size=None):
return jsonify({"type": "sql_error", "error": str(e)})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8084, debug=False)