• ArcPy 拷贝数据库


    使用Python脚本进行图形数据库的拷贝。

    原始帖子地址:https://www.2cto.com/database/201302/187391.html

    整理Python代码:

     1 # -*- coding: utf-8 -*-
     2 # nightroad
     3 import arcpy, os, string,sys
     4 reload(sys)
     5 sys.setdefaultencoding( "utf-8" )
     6 
     7 def CopyDatasets(start_db,end_db,num):
     8     try:
     9         #Set workspaces 
    10         arcpy.env.workspace = start_db
    11         wk2 = end_db
    12         datasetList = arcpy.ListDatasets()
    13         #for feature classes within datasets
    14         for dataset in datasetList:
    15             print "Reading: {0}".format(dataset)
    16             name = arcpy.Describe(dataset)
    17             new_data=name.name[num:]
    18             if (not arcpy.Exists(wk2 + os.sep + new_data)):
    19                 arcpy.Copy_management(dataset, wk2 + os.sep + new_data)
    20                 print "Completed copy on {0}".format(new_data)
    21             else:
    22                 print "Dataset {0} already exists in the end_db so skipping".format(new_data) #如果有同名的就Skip
    23         #Clear memory
    24         del dataset
    25     except Exception as e:
    26         arcpy.AddError(e.message)
    27 
    28 def CopyFeatureClasses(start_db,end_db,num):  
    29     try:
    30         #Set workspaces
    31         arcpy.env.workspace = start_db
    32         wk2 = end_db
    33         datasetList = arcpy.ListDatasets()
    34         #for feature classes within datasets
    35         for fc in arcpy.ListFeatureClasses():
    36             print "Reading: {0}".format(fc)
    37             name = arcpy.Describe(fc)
    38             new_data=name.name[num:]
    39             if arcpy.Exists(wk2 + os.sep + new_data)==False:
    40                 arcpy.Copy_management(fc, wk2 + os.sep + new_data)
    41                 print "Completed copy on {0}".format(new_data)
    42             else:
    43                 print "Feature class {0} already exists in the end_db so skipping".format(new_data)
    44         #Clear memory
    45         del fc  
    46     except Exception as e:  
    47         arcpy.AddError(e.message)
    48 
    49 def CopyTables(start_db,end_db,num):
    50     try:
    51     #Set workspaces
    52         arcpy.env.workspace = start_db
    53         wk2 = end_db
    54         datasetList = arcpy.ListDatasets()
    55         #for feature classes within datasets
    56         for table in arcpy.ListTables():
    57             print "Reading: {0}".format(table)
    58             name = arcpy.Describe(table)
    59             new_data=name.name[num:]
    60             if arcpy.Exists(wk2 + os.sep + new_data)==False:
    61                 arcpy.Copy_management(table, wk2 + os.sep + new_data)
    62                 print "Completed copy on {0}".format(new_data)
    63             else:
    64                 print "Table {0} already exists in the end_db so skipping".format(new_data)
    65         #Clear memory
    66         del table
    67     except Exception as e:
    68         arcpy.AddError(e.message)
    69         
    70 if __name__== "__main__":  
    71     start_db =r'C:Users
    ightroadAppDataRoamingESRIDesktop10.2ArcCatalog	est.sde' #源工作空间  
    72     end_db = r'E:TestTest.gdb'  #目的工作空间  
    73     num =0                              # (例如: sde.sde. is 8)  
    74     CopyDatasets(start_db,end_db,num)  
    75     CopyFeatureClasses(start_db,end_db,num)  
    76     CopyTables(start_db,end_db,num)  

    Python脚本的目的就是将获得源工作空间和目的工作空间,里面有一个Num的选择,根据数据库不一样来记录要素类或者数据集前的字符串:
    SQL Server:sde.sde.featureclass或者sde.dbo.featureclass
    那么只记录sde.sde.(sde.dbo.)一共8个字符,num=8
    Oracle:test.featureclass
    那么只记录test.一共5个字符串,num=5
    FileGDB,没有前缀,num=0

  • 相关阅读:
    php设计模式 — 简单工厂模式(静态工厂方法模式)
    Vue-Router
    各种选项卡
    jq动画
    如何使用swiper写轮播
    Gulp代码压缩
    闭包
    jquery.validation校验
    grunt-js文件压缩
    CSS
  • 原文地址:https://www.cnblogs.com/nightroad/p/9627027.html
Copyright © 2020-2023  润新知