基于ArcPy实现批量备份及删除SDE数据表

1、需求描述:

1)批量的操作SDE数据库表
2)保险起见操作前先备份
3)操作遵循一定的规则

2、以下代码实现以下功能:

1)查找SDE数据库中表名的以SDE.hb_01、SDE.hb_02开头的表
2)将查找到的表备份为shp文件
3)查找每给表中满足固定条件的行,然后删除
4)如果有异常,输出异常信息

import arcpy
import os,sys,time

sdeConnStr = 'Database Connections/sde.sde'
bakPath = r'D:\gisDataBak'
if name == '__main__':
    arcpy.env.workspace = sdeConnStr
    tbList = arcpy.ListFeatureClasses()
    if not type(tbList):
        return
    try:
        #创建备份目录
        date = time.strftime(r'%Y%m%d')
        bakPath = os.path.join(bakPath,date)
        if(os.path.exists(bakPath)){
            os.mkdir(bakPath)
        }
        #遍历sde图层
        for sdeLayer in tbList:
            #删除数据            
            if (sdeLayer.startswith('SDE.hb_01') or (sdeLayer.startswith('SDE.hb_02')):
                #先备份
                bakPath = os.path.join(bakPath, sdeLayer + '_bak.shp')
                arcpy.CopyFeatures_management(sdeLayer,exp)

                #查询
                sqlExpStr = "OBJCODE like '470846%'" 
                arcpy.SelectLayerByAttribute_management(sdeLayer,"NEW_SELECTION", sqlExpStr)

                #删除选择行
                count = int(arcpy.GetCount_management(sdeLayer).getOutput(0))
                if count> 0:
                    arcpy.DeleteRows_management()
    except Exception as e:
        import traceback
        import sys
        tb = sys.exc_info()[2]
        print("Line {0}".format(tb.tb_lineno))
        print(e.message)

可以以此为基础,调整操作方法,执行其它对SDE数据库的批量操作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章