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数据库的批量操作