@@ -121,7 +121,8 @@ def update_ds(session: SessionDep, trans: Trans, user: CurrentUser, ds: CoreData
121121def update_ds_recommended_config (session : SessionDep , datasource_id : int , recommended_config : int ):
122122 # 使用 update 语句直接更新,避免 ORM 追踪问题
123123 from sqlalchemy import update
124- stmt = update (CoreDatasource ).where (CoreDatasource .id == datasource_id ).values (recommended_config = recommended_config )
124+ stmt = update (CoreDatasource ).where (CoreDatasource .id == datasource_id ).values (
125+ recommended_config = recommended_config )
125126 session .execute (stmt )
126127 session .commit ()
127128
@@ -181,8 +182,10 @@ def execSql(session: SessionDep, id: int, sql: str):
181182 return exec_sql (ds , sql , True )
182183
183184
184- def sync_single_fields (session : SessionDep , trans : Trans , id : int ):
185- table = session .query (CoreTable ).filter (CoreTable .id == id ).first ()
185+ def sync_single_fields (session : SessionDep , trans : Trans , ds_id : int , id : int ):
186+ table = session .query (CoreTable ).filter (and_ (CoreTable .id == id , CoreTable .ds_id == ds_id )).first ()
187+ if not table :
188+ raise HTTPException (status_code = 500 , detail = 'The data source ID does not match the table ID' )
186189 ds = session .query (CoreDatasource ).filter (CoreDatasource .id == table .ds_id ).first ()
187190
188191 tables = getTablesByDs (session , ds )
@@ -289,6 +292,10 @@ def update_table_and_fields(session: SessionDep, data: TableObj):
289292
290293
291294def updateTable (session : SessionDep , table : CoreTable ):
295+ obj = session .query (CoreTable ).filter (and_ (CoreTable .id == table .id , CoreTable .ds_id == table .ds_id )).first ()
296+ if not obj :
297+ raise HTTPException (status_code = 500 , detail = 'The data source ID does not match the table ID' )
298+
292299 update_table (session , table )
293300
294301 # do table embedding
@@ -297,6 +304,11 @@ def updateTable(session: SessionDep, table: CoreTable):
297304
298305
299306def updateField (session : SessionDep , field : CoreField ):
307+ obj = session .query (CoreField ).filter (
308+ and_ (CoreField .id == field .id , CoreField .table_id == field .table_id , CoreField .ds_id == field .ds_id )).first ()
309+ if not obj :
310+ raise HTTPException (status_code = 500 , detail = 'Resource ID does not matched' )
311+
300312 update_field (session , field )
301313
302314 # do table embedding
0 commit comments