diff --git a/api/api_v1/endpoints/query.py b/api/api_v1/endpoints/query.py index ea434a6..b7133c3 100644 --- a/api/api_v1/endpoints/query.py +++ b/api/api_v1/endpoints/query.py @@ -37,9 +37,13 @@ async def query_sql( ) -> schemas.Msg: """原 sql 查询 """ sql = data_in.sql - sql = sql.replace('$game', game) - data = await ckdb.execute(sql) - return schemas.Msg(code=0, msg='ok', data=data) + sql1=sql.lower() + if 'insert' not in sql1 and 'update' not in sql1 and 'delete' not in sql1 and 'select' in sql1: + sql = sql.replace('$game', game) + data = await ckdb.execute(sql) + return schemas.Msg(code=0, msg='ok', data=data) + else: + return schemas.Msg(code=0, msg='ok', data='当前只支持SQL查询语句!') @router.post("/sql_export") @@ -237,6 +241,19 @@ async def event_model( q['date_range'] = date_range #把要查询的时间加入q字典中 df = await ckdb.query_dataframe(sql) #以sql语句查出数据,df是二维列表 df.fillna(0, inplace=True)#以0填补空数据 + #映射对应中文返回给前端展示 + for i in groupby: + if i == 'svrindex': + if game == 'mfmh5': + game = 'mzmfmh5' + chinese={} + resp = await crud.select_map.get_one(db, game,i) + for ii in resp: + chinese[ii['id']]=ii['title'] + for k,v in chinese.items(): + #开始映射 + df.loc[df[i] == k, i] = v + #获取第一矩阵的长度 if df.shape[0] == 0: df = pd.DataFrame({'date': date_range, 'values': 0 * len(date_range)}) @@ -311,7 +328,10 @@ async def event_model( if str(group) == '0' and analysis.event_view['groupBy'][0]['columnDesc']== '城市': q['groups'].append('未知城市') else: - q['groups'].append(str(group)) + if 'str' in str(type(group)): + q['groups'].append(str(group)) + else: + q['groups'].append(str(list(group))) concat_data = [] for i in set(date_range) - set(df_group['date']): if len(groupby) > 1: diff --git a/crud/select_map.py b/crud/select_map.py index 58e27da..9594a61 100644 --- a/crud/select_map.py +++ b/crud/select_map.py @@ -26,5 +26,10 @@ class CRUDSelectMap(CRUDBase): res = await self.find_one(db, where, {'_id': 0}) return res + async def get_one(self, db: AsyncIOMotorDatabase, game: str, screen: str): + where = {'game': game, 'attr_name': screen} + res = await self.find_one(db, where, {'_id': 0}) + return res.get('map_') + select_map = CRUDSelectMap('select_map')