1+ import asyncio
12import hashlib
23import os
34import uuid
@@ -38,22 +39,34 @@ async def get_datasource(session: SessionDep, id: int):
3839
3940@router .post ("/check" )
4041async def check (session : SessionDep , ds : CoreDatasource ):
41- return check_status (session , ds , True )
42+ def inner ():
43+ return check_status (session , ds , True )
44+
45+ return await asyncio .to_thread (inner )
4246
4347
4448@router .post ("/add" , response_model = CoreDatasource )
4549async def add (session : SessionDep , trans : Trans , user : CurrentUser , ds : CreateDatasource ):
46- return create_ds (session , trans , user , ds )
50+ def inner ():
51+ return create_ds (session , trans , user , ds )
52+
53+ return await asyncio .to_thread (inner )
4754
4855
4956@router .post ("/chooseTables/{id}" )
5057async def choose_tables (session : SessionDep , id : int , tables : List [CoreTable ]):
51- chooseTables (session , id , tables )
58+ def inner ():
59+ chooseTables (session , id , tables )
60+
61+ await asyncio .to_thread (inner )
5262
5363
5464@router .post ("/update" , response_model = CoreDatasource )
5565async def update (session : SessionDep , trans : Trans , user : CurrentUser , ds : CoreDatasource ):
56- return update_ds (session , trans , user , ds )
66+ def inner ():
67+ return update_ds (session , trans , user , ds )
68+
69+ return await asyncio .to_thread (inner )
5770
5871
5972@router .post ("/delete/{id}" , response_model = CoreDatasource )
@@ -82,7 +95,10 @@ async def get_fields(session: SessionDep, id: int, table_name: str):
8295
8396@router .post ("/execSql/{id}/{sql}" )
8497async def exec_sql (session : SessionDep , id : int , sql : str ):
85- return execSql (session , id , sql )
98+ def inner ():
99+ return execSql (session , id , sql )
100+
101+ return await asyncio .to_thread (inner )
86102
87103
88104@router .post ("/tableList/{id}" )
@@ -111,17 +127,23 @@ async def edit_field(session: SessionDep, field: CoreField):
111127
112128
113129@router .post ("/previewData/{id}" )
114- async def edit_local (session : SessionDep , current_user : CurrentUser , id : int , data : TableObj ):
115- try :
116- return preview (session , current_user , id , data )
117- except Exception as e :
118- SQLBotLogUtil .error (f"Preview failed: { e } " )
119- raise HTTPException (status_code = 500 , detail = f'Preview Failed: { e .args } ' )
130+ async def preview_data (session : SessionDep , current_user : CurrentUser , id : int , data : TableObj ):
131+ def inner ():
132+ try :
133+ return preview (session , current_user , id , data )
134+ except Exception as e :
135+ SQLBotLogUtil .error (f"Preview failed: { e } " )
136+ raise HTTPException (status_code = 500 , detail = f'Preview Failed: { e .args } ' )
137+
138+ return await asyncio .to_thread (inner )
120139
121140
122141@router .post ("/fieldEnum/{id}" )
123142async def field_enum (session : SessionDep , id : int ):
124- return fieldEnum (session , id )
143+ def inner ():
144+ return fieldEnum (session , id )
145+
146+ return await asyncio .to_thread (inner )
125147
126148
127149@router .post ("/uploadExcel" )
@@ -136,32 +158,12 @@ async def upload_excel(session: SessionDep, file: UploadFile = File(...)):
136158 with open (save_path , "wb" ) as f :
137159 f .write (await file .read ())
138160
139- sheets = []
140- with get_data_engine () as conn :
141- if filename .endswith (".csv" ):
142- df = pd .read_csv (save_path )
143- tableName = f"sheet1_{ hashlib .sha256 (uuid .uuid4 ().bytes ).hexdigest ()[:10 ]} "
144- sheets .append ({"tableName" : tableName , "tableComment" : "" })
145- column_len = len (df .dtypes )
146- fields = []
147- for i in range (column_len ):
148- # build fields
149- fields .append ({"name" : df .columns [i ], "type" : str (df .dtypes [i ]), "relType" : "" })
150- # create table
151- create_table (conn , tableName , fields )
152-
153- data = [
154- {df .columns [i ]: None if pd .isna (row [i ]) else (int (row [i ]) if "int" in str (df .dtypes [i ]) else row [i ])
155- for i in range (len (row ))}
156- for row in df .values
157- ]
158- # insert data
159- insert_data (conn , tableName , fields , data )
160- else :
161- df_sheets = pd .read_excel (save_path , sheet_name = None )
162- # build columns and data to insert db
163- for sheet_name , df in df_sheets .items ():
164- tableName = f"{ sheet_name } _{ hashlib .sha256 (uuid .uuid4 ().bytes ).hexdigest ()[:10 ]} "
161+ def inner ():
162+ sheets = []
163+ with get_data_engine () as conn :
164+ if filename .endswith (".csv" ):
165+ df = pd .read_csv (save_path )
166+ tableName = f"sheet1_{ hashlib .sha256 (uuid .uuid4 ().bytes ).hexdigest ()[:10 ]} "
165167 sheets .append ({"tableName" : tableName , "tableComment" : "" })
166168 column_len = len (df .dtypes )
167169 fields = []
@@ -178,6 +180,29 @@ async def upload_excel(session: SessionDep, file: UploadFile = File(...)):
178180 ]
179181 # insert data
180182 insert_data (conn , tableName , fields , data )
181-
182- os .remove (save_path )
183- return {"filename" : filename , "sheets" : sheets }
183+ else :
184+ df_sheets = pd .read_excel (save_path , sheet_name = None )
185+ # build columns and data to insert db
186+ for sheet_name , df in df_sheets .items ():
187+ tableName = f"{ sheet_name } _{ hashlib .sha256 (uuid .uuid4 ().bytes ).hexdigest ()[:10 ]} "
188+ sheets .append ({"tableName" : tableName , "tableComment" : "" })
189+ column_len = len (df .dtypes )
190+ fields = []
191+ for i in range (column_len ):
192+ # build fields
193+ fields .append ({"name" : df .columns [i ], "type" : str (df .dtypes [i ]), "relType" : "" })
194+ # create table
195+ create_table (conn , tableName , fields )
196+
197+ data = [
198+ {df .columns [i ]: None if pd .isna (row [i ]) else (int (row [i ]) if "int" in str (df .dtypes [i ]) else row [i ])
199+ for i in range (len (row ))}
200+ for row in df .values
201+ ]
202+ # insert data
203+ insert_data (conn , tableName , fields , data )
204+
205+ os .remove (save_path )
206+ return {"filename" : filename , "sheets" : sheets }
207+
208+ return await asyncio .to_thread (inner )
0 commit comments