Mais

Definir o espaço de trabalho para conexão SDE em Python

Definir o espaço de trabalho para conexão SDE em Python


Como definimos a conexão SDE para o espaço de trabalho em scripts Python?


D.E.Wright chega antes de mim, ele está certo, use uma conexão como no ArcCatalog. Mas aqui está minha opinião, feita no prompt do Python no ArcMap, usando o caminho completo direto para um arquivo de conexão sde:

>>> import arcpy >>> arcpy.env.workspace = "C:  Usuários  chad  AppData  Roaming  ESRI  Desktop10.0  ArcCatalog  anrc_water (anrcuser) .sde"> >> fdlist = arcpy.ListDatasets () >>> para fd em fdlist:… print fd… anrc_water.DBO.ChadTest anrc_water.DBO.Temp_Data anrc_water.DBO.Master_Datasets ANRC_WATER.DBO.ENF_FILL_FACC ANRCD_WATER.DBO.ENFIR >>

Para obter o caminho para meu arquivo de conexão sde, apenas cliquei com o botão direito do mouse em meu banco de dados SDE na árvore do Catálogo, acessei as propriedades e, na guia Geral, copiei o caminho do campo Nome:


Os exemplos 3 a 5 nesta página são incríveis para este problema: http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//0017000000q7000000

Aqui está uma versão simplificada que fiz que me permite fazer conexões dinâmicas em python usando apenas a conexão direta do Sql Server.

"" "Nome: sdeconn.py Descrição: funções utilitárias para conexões sde" "" # Import system modules import arcpy, os, sys def connect (database, server = "", nome de usuário ="", senha ="", version =" SDE.DEFAULT "): # Verifique se o valor inserido para a opção try: #Usage parameters para conexão de banco de dados espacial para atualizar o serviço =" sde: sqlserver: "+ server account_authentication = 'DATABASE_AUTH' version = version.upper ( ) database = database.lower () # Verifique se a conexão direta se service.find (":") <> -1: #Esta é a conexão direta ServiceConnFileName = service.replace (":", "") ServiceConnFileName = ServiceConnFileName.replace (";", "") ServiceConnFileName = ServiceConnFileName.replace ("=", "") ServiceConnFileName = ServiceConnFileName.replace ("/", "") ServiceConnFileName = ServiceConnFileName.replace ("", "") else: arcpy.AddMessage (" n +++++++++") arcpy.AddMessage ("Exiting !!") arcpy.AddMessage ("+++++++++") sys.exit (" nSintaxe para uma conexão direta no parâmetro Serviço é necessário para a atualização do geodatabase. ") # Variáveis ​​locais Conn_File_NameT = server +" _ "+ ServiceConnFileName +" _ "+ database +" _ "+ nome de usuário if os.environ.get (" TEMP ") == None: temp =" c:  temp "else: temp = os.environ.get ("TEMP") if os.environ.get ("TMP") == Nenhum: temp = "/ usr / tmp" else: temp = os.environ.get ("TMP") Connection_File_Name = temp + os.sep + Conn_File_NameT + ".sde" if os.path.isfile (Connection_File_Name): retorna Connection_File_Name # Verifique o arquivo .sde e exclua-o se estiver presente arcpy.env.overwriteOutput = True # Variáveis ​​definidas no script; outras opções de variáveis ​​comentadas no final da linha saveUserInfo = "SAVE_USERNAME" #DO_NOT_SAVE_USERNAME saveVersionInfo = "SAVE_VERSION" #DO_NOT_SAVE_VERSION print " nCriando arquivo de conexão ArcSDE…  n" # Processo: Criar arquivo de conexão ArcSDE_name, # Usage_name_do_version: outerame_ , servidor, serviço, banco de dados, account_authentication, nome de usuário, senha, save_username_password, versão, save_version_info imprimir temp imprimir Conn_File_NameT servidor de impressão serviço de impressão banco de dados de impressão account_authentication impressão nome de usuário imprimir senha imprimir saveUserInfo versão de impressão imprimir saveVersionInfo arcpyName.CreateArcSDEConnectionFile_management serviço, banco de dados, conta_autenticação, nome de usuário, senha, saveUserInfo, versão, saveVersionInfo) para i no intervalo (arcpy.GetMessageCount ()): se "000565" em arcpy.GetMessage (i): # Verifique se a conexão do banco de dados foi bem-sucedida arcpy.AddReturnMessage (i) arcpy.AddMessage (" n +++++++++") arcpy.AddMessage ("Exiting !!") arcpy.AddM essage ("+++++++++  n") sys.exit (3) else: arcpy.AddReturnMessage (i) arcpy.AddMessage ("+++++++++  n") return Connection_File_Name #Verifique se nenhum valor inserido para a opção, exceto SystemExit como e: print e.code return

Usando este script, posso criar um arquivo de conexão em tempo real simplesmente chamando:

import arcpy, sdeconn myconnect1 = sdeconn.connect ("database1", "server") myconnect2 = sdeconn.connect ("database2", "server")

Isso elimina o problema de arquivos de conexão de banco de dados serem inconsistentes de máquina para máquina ou de perfil de usuário para perfil de usuário.


Você precisa definir seu documento de conexão SDE como faria normalmente no ArcCatalog; Em seguida, você criará o caminho para a camada em Python assim:

DataConnections = "C:  AGS_GCSS_Tools  DatabaseConnections " TCA_Connection = "prod_sde.sde  prod_SDE.GIS.PropertyTax" + CAPSYear + " prod_SDE.GIS.Tca" TCA_Layer = DataConnections + TCA_Connection

Isso definirá o caminho para onde o arquivo .SDE reside, mas então você definirá o caminho dentro dessa conexão para a camada que está procurando. No meu caso, também defino uma variável Year.


você também pode definir o caminho de conexão diretamente na sua Consulta.

PathSdeConnection = "C:  Usuários  {Nome de usuário do windows}  AppData  Roaming  ESRI  Desktop10.2  ArcCatalog  {nome de ConenctionString} .sde

e usá-lo na Pesquisa e etc.

com arcpy.da.SearchCursor (PathSdeConnection, ("OBJECTID", "SHAPE @", "SHAPE @ JSON"), {WhereClause}) como cursor: para linha no cursor:…

Assista o vídeo: SCV20 What is a Stochastic Differential Equation?