fix: 修复连接池泄漏(conn.close改为put_db) + put_db处理已关闭连接 + 添加日线同步cron

This commit is contained in:
freedakgmail
2026-07-22 07:12:09 +08:00
parent 488ef6b8e2
commit 9a5e24ccd6
5 changed files with 54 additions and 54 deletions
+15 -15
View File
@@ -2,7 +2,7 @@
管理后台 API 路由
"""
from flask import Blueprint, request, jsonify, session, render_template
from db import get_db
from db import get_db, put_db
from psycopg2.extras import RealDictCursor
from werkzeug.security import generate_password_hash
import functools
@@ -182,7 +182,7 @@ def admin_required(f):
if not row or not row[0]:
return jsonify({'success': False, 'error': '无管理员权限'}), 403
finally:
conn.close()
put_db(conn)
return f(*args, **kwargs)
return decorated
@@ -201,7 +201,7 @@ def admin_page():
if not row or not row[0]:
return '无权访问', 403
finally:
conn.close()
put_db(conn)
return render_template('admin.html')
@@ -281,7 +281,7 @@ def dashboard():
return jsonify({'success': True, 'data': stats})
finally:
conn.close()
put_db(conn)
# ========== 用户管理 ==========
@@ -339,7 +339,7 @@ def list_users():
return jsonify({'success': True, 'data': users})
finally:
conn.close()
put_db(conn)
@bp.route('/api/admin/users/<int:user_id>', methods=['GET'])
@@ -437,7 +437,7 @@ def get_user_detail(user_id):
}
})
finally:
conn.close()
put_db(conn)
@bp.route('/api/admin/users/<int:user_id>/reset_password', methods=['POST'])
@@ -461,7 +461,7 @@ def reset_user_password(user_id):
conn.rollback()
return jsonify({'success': False, 'error': str(e)}), 500
finally:
conn.close()
put_db(conn)
@bp.route('/api/admin/users/<int:user_id>/toggle_admin', methods=['POST'])
@@ -483,7 +483,7 @@ def toggle_admin(user_id):
conn.rollback()
return jsonify({'success': False, 'error': str(e)}), 500
finally:
conn.close()
put_db(conn)
@bp.route('/api/admin/users/<int:user_id>', methods=['DELETE'])
@@ -509,7 +509,7 @@ def delete_user(user_id):
conn.rollback()
return jsonify({'success': False, 'error': str(e)}), 500
finally:
conn.close()
put_db(conn)
# ========== 用户数据管理 ==========
@@ -526,7 +526,7 @@ def delete_user_watchlist(user_id, code):
conn.commit()
return jsonify({'success': True})
finally:
conn.close()
put_db(conn)
@bp.route('/api/admin/users/<int:user_id>/trades/<int:trade_id>', methods=['DELETE'])
@@ -541,7 +541,7 @@ def delete_user_trade(user_id, trade_id):
conn.commit()
return jsonify({'success': True})
finally:
conn.close()
put_db(conn)
# ========== 系统数据 ==========
@@ -568,7 +568,7 @@ def scan_history():
""")
return jsonify({'success': True, 'data': [dict(r) for r in cur.fetchall()]})
finally:
conn.close()
put_db(conn)
@bp.route('/api/admin/data_stats', methods=['GET'])
@@ -603,7 +603,7 @@ def data_stats():
return jsonify({'success': True, 'data': {'tables': result, 'logs': logs}})
finally:
conn.close()
put_db(conn)
# ========== 全景扫描管理 ==========
@@ -786,7 +786,7 @@ def kline_sync_status():
total_stocks = cur.fetchone()[0]
cur.close()
conn.close()
put_db(conn)
is_running = _is_kline_sync_running()
@@ -1308,7 +1308,7 @@ def admin_scan_status():
triggered = cur.fetchone()[0]
cur.close()
conn.close()
put_db(conn)
is_running = _is_scan_running()