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



import traceback
from app.models import Table,Database,DES

from osgeo.ogr import DataSource


from app.models import db
from app.util.component.ApiTemplate import ApiTemplate

from app.util.component.PGUtil import PGUtil
import configure
from flask import current_app
class Api(ApiTemplate):
    api_name = "删除表"
    def process(self):

        res = {}
        pg_ds = None
        sys_ds = None
        try:

            table_guid = self.para.get("guid")
    
            table = Table.query.filter_by(guid=table_guid)
    
            if not table.one_or_none():
                res["result"]=False
                res["msg"]= "数据不存在!"
                return res

    
            table = table.one_or_none()
    

    
            # 删除真实数据
            database = Database.query.filter_by(guid=table.database_guid).one_or_none()
            if not database:
                res["result"]=False
                res["msg"]= "数据库不存在!"
                return res

    
            pg_ds: DataSource = PGUtil.open_pg_data_source(1, DES.decode(database.sqlalchemy_uri))
            sys_ds: DataSource = PGUtil.open_pg_data_source(1, configure.SQLALCHEMY_DATABASE_URI)

            #删除抽稀表
            vacuate_tables=table.relate_table_vacuates.all()
            for vt in vacuate_tables:
                db.session.delete(vt)
                try:
                    sys_ds.DeleteLayer(vt.name)
                except:
                    current_app.logger.warning("{}不存在!".format(vt.name))

            try:
                pg_ds.DeleteLayer(table.name)
            except:
                current_app.logger.warning("{}不存在!".format(table.name))


            # 删除元数据

            db.session.delete(table)
            db.session.commit()
            res["result"] = True
            res["msg"] ="删除成功!"
        except Exception as e:
            raise e
        finally:
            if pg_ds:
                pg_ds.Destroy()
            if sys_ds:
                sys_ds.Destroy()
        return res

    api_doc={
    "tags":["管理接口"],
    "parameters":[
        {"name": "guid",
         "in": "formData",
         "type": "string",
         "description": "表guid","required":"true"},
    ],
    "responses":{
        200:{
            "schema":{
                "properties":{
                }
            }
            }
        }
    }