基於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數據庫的批量操作

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