1818router = APIRouter (tags = ["datasource" ], prefix = "/datasource" )
1919path = "/opt/sqlbot/data/excel"
2020
21+
2122@router .get ("/ws/{oid}" , include_in_schema = False )
2223async def query_by_oid (session : SessionDep , user : CurrentUser , oid : int ) -> List [CoreDatasource ]:
2324 if not user .isAdmin :
2425 raise Exception ("no permission to execute" )
2526 return get_datasource_list (session = session , user = user , oid = oid )
2627
28+
2729@router .get ("/list" )
2830async def datasource_list (session : SessionDep , user : CurrentUser ):
2931 return get_datasource_list (session = session , user = user )
@@ -134,32 +136,11 @@ async def upload_excel(session: SessionDep, file: UploadFile = File(...)):
134136 with open (save_path , "wb" ) as f :
135137 f .write (await file .read ())
136138
137- conn = get_data_engine ()
138139 sheets = []
139- if filename .endswith (".csv" ):
140- df = pd .read_csv (save_path )
141- tableName = f"sheet1_{ hashlib .sha256 (uuid .uuid4 ().bytes ).hexdigest ()[:10 ]} "
142- sheets .append ({"tableName" : tableName , "tableComment" : "" })
143- column_len = len (df .dtypes )
144- fields = []
145- for i in range (column_len ):
146- # build fields
147- fields .append ({"name" : df .columns [i ], "type" : str (df .dtypes [i ]), "relType" : "" })
148- # create table
149- create_table (conn , tableName , fields )
150-
151- data = [
152- {df .columns [i ]: None if pd .isna (row [i ]) else (int (row [i ]) if "int" in str (df .dtypes [i ]) else row [i ])
153- for i in range (len (row ))}
154- for row in df .values
155- ]
156- # insert data
157- insert_data (conn , tableName , fields , data )
158- else :
159- df_sheets = pd .read_excel (save_path , sheet_name = None )
160- # build columns and data to insert db
161- for sheet_name , df in df_sheets .items ():
162- tableName = f"{ sheet_name } _{ hashlib .sha256 (uuid .uuid4 ().bytes ).hexdigest ()[:10 ]} "
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 ]} "
163144 sheets .append ({"tableName" : tableName , "tableComment" : "" })
164145 column_len = len (df .dtypes )
165146 fields = []
@@ -176,7 +157,27 @@ async def upload_excel(session: SessionDep, file: UploadFile = File(...)):
176157 ]
177158 # insert data
178159 insert_data (conn , tableName , fields , data )
179- conn .close ()
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 ]} "
165+ sheets .append ({"tableName" : tableName , "tableComment" : "" })
166+ column_len = len (df .dtypes )
167+ fields = []
168+ for i in range (column_len ):
169+ # build fields
170+ fields .append ({"name" : df .columns [i ], "type" : str (df .dtypes [i ]), "relType" : "" })
171+ # create table
172+ create_table (conn , tableName , fields )
173+
174+ data = [
175+ {df .columns [i ]: None if pd .isna (row [i ]) else (int (row [i ]) if "int" in str (df .dtypes [i ]) else row [i ])
176+ for i in range (len (row ))}
177+ for row in df .values
178+ ]
179+ # insert data
180+ insert_data (conn , tableName , fields , data )
180181
181182 os .remove (save_path )
182183 return {"filename" : filename , "sheets" : sheets }
0 commit comments