Skip to content

Commit 6a55003

Browse files
committed
feat: ds excel
1 parent 54c4323 commit 6a55003

File tree

1 file changed

+27
-26
lines changed

1 file changed

+27
-26
lines changed

backend/apps/datasource/api/datasource.py

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,14 @@
1818
router = APIRouter(tags=["datasource"], prefix="/datasource")
1919
path = "/opt/sqlbot/data/excel"
2020

21+
2122
@router.get("/ws/{oid}", include_in_schema=False)
2223
async 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")
2830
async 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

Comments
 (0)