From f4742ffbd1eb28f8091dfc4d762fd517b06204f9 Mon Sep 17 00:00:00 2001 From: Pine Date: Sun, 6 Sep 2026 20:58:08 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=94=B9=E7=94=A8information=5Fschema?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=9C=89user=5Fid=E5=88=97=E7=9A=84=E8=A1=A8?= =?UTF-8?q?,=E5=BD=BB=E5=BA=95=E8=A7=A3=E5=86=B3AsyncEngine/Session?= =?UTF-8?q?=E6=97=A0=E6=B3=95inspect=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/routers/rbac_admin.py | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/app/api/routers/rbac_admin.py b/app/api/routers/rbac_admin.py index 5454264..52ebd32 100644 --- a/app/api/routers/rbac_admin.py +++ b/app/api/routers/rbac_admin.py @@ -240,22 +240,12 @@ async def delete_user( "market_purchase_orders", "market_purchases", ] - # 获取数据库中所有表的列信息,避免对没有 user_id 的表执行删除 - from sqlalchemy import inspect as sa_inspect - - def _get_tables_with_user_id(sync_conn): - insp = sa_inspect(sync_conn) - result = set() - for tname in cascade_tables: - try: - cols = [c["name"] for c in insp.get_columns(tname)] - if "user_id" in cols: - result.add(tname) - except Exception: - pass - return result - - tables_with_user_id = await db.session.run_sync(_get_tables_with_user_id) + # 直接查 information_schema 获取有 user_id 列的表,避免对没有 user_id 的表执行删除 + result = await db.session.execute( + sql_text("SELECT DISTINCT table_name FROM information_schema.columns WHERE column_name = 'user_id' AND table_schema = DATABASE()") + ) + existing_user_id_tables = {row[0] for row in result.fetchall()} + tables_with_user_id = [t for t in cascade_tables if t in existing_user_id_tables] deleted_count = 0 for table in tables_with_user_id: