field_value.py 2.9 KB
#author:        4N
#createtime:    2021/1/27
#email:         nheweijun@sina.com


import traceback
from ..models import Table,Columns,DES
from app.util.component.ApiTemplate import ApiTemplate
from app.util.component.PGUtil import PGUtil
from app.util.component.ModelVisitor import ModelVisitor
from sqlalchemy.orm import Session


class Api(ApiTemplate):
    api_name = "属性列表"
    def process(self):

        #返回结果
        res={}
        system_session = None

        try:
            table_guid = self.para.get("table_guid")
            column_guid = self.para.get("column_guid")

            page_index = int(self.para.get("page_index", "0"))
            page_size = int(self.para.get("page_size", "10"))



            table:Table = Table.query.filter_by(guid=table_guid).one_or_none()
            column:Columns = Columns.query.filter_by(guid=column_guid).one_or_none()
            system_session: Session = PGUtil.get_db_session(DES.decode(table.relate_database.sqlalchemy_uri))

            if self.para.get("key"):
                query = '''where "{}" like '%{}%' '''.format(column.name,self.para.get("key"))
            else :
                query = ""



            query_sql = 'select distinct "{}" from public."{}" {} order by "{}" limit {} offset {}'.format(
                column.name,table.name,query, column.name,page_size,page_index * page_size
            )


            query_res = system_session.execute(query_sql).fetchall()

            query_count = system_session.execute('select count(distinct "{}") from public."{}" {} '.format(
                column.name,table.name,query
            )).fetchone()

            res["data"] = {}
            res["data"]["count"] = query_count[0]
            res["data"]["list"] = [dat[0] for dat in query_res]
            res["result"] = True

        except Exception as e:
            print(traceback.format_exc())
            raise e
        finally:
            try:
                system_session.close()
            except:
                pass
        return res

    api_doc={
    "tags":["管理接口"],
    "parameters":[
        {"name": "table_guid",
         "in": "formData",
         "type": "string",
         "description": "表guid"},
        {"name": "column_guid",
         "in": "formData",
         "type": "string",
         "description": "表guid"},
        {"name": "page_index",
         "in": "formData",
         "type": "int",
         "description": "页"},
        {"name": "page_size",
         "in": "formData",
         "type": "int",
         "description": "页大小"},
        {"name": "key",
         "in": "formData",
         "type": "string",
         "description": "key检索关键字"},

    ],
    "responses":{
        200:{
            "schema":{
                "properties":{
                }
            }
            }
        }
    }