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

from ..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
from app.util.component.UserCheck import UserCheck

class Api(ApiTemplate):
    api_name = "删除表"
    def process(self):

        res = {}
        pg_ds = None
        va_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()

            #验证权限
            UserCheck.verify(table.creator)

            if not database:
                res["result"]=False
                res["msg"]= "数据库不存在!"
                return res

            pg_ds: DataSource = PGUtil.open_pg_data_source(1, DES.decode(database.sqlalchemy_uri))
            
            if configure.VACUATE_DB_URI:
                va_ds: DataSource = PGUtil.open_pg_data_source(1, configure.VACUATE_DB_URI)
            else:
                va_ds: DataSource = PGUtil.open_pg_data_source(1, DES.decode(database.sqlalchemy_uri))


            #删除抽稀表
            vacuate_tables=table.relate_table_vacuates.all()
            for vt in vacuate_tables:
                db.session.delete(vt)
                try:
                    va_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 va_ds:
                va_ds.Destroy()
        return res

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