6 votos

¿Puede ArcPy comprobar la disponibilidad de SDE Connection antes de intentar utilizarlo?

En un script de Python que uso para publicar los servicios de geoprocesamiento de ArcGIS 10.0 tengo un código:

arcpy.AddMessage("If process hangs here, check for ArcSDE connections issue by trying to open " + mapFile + " in ArcMap")
mxd = arcpy.mapping.MapDocument(mapFile)

La razón por la que lo tengo es que de vez en cuando se ha superado el número máximo de Conexiones SDE que puede soportar el servidor.

Antes de golpear esto me gustaría tener la prueba de ArcPy:

  1. Si la Conexión SDE puede ser alcanzada en absoluto; y
  2. Si la conexión SDE es a un ArcSDE que responde en un tiempo razonable.

¿Tiene ArcPy algún medio para probar las conexiones SDE antes de intentar utilizarlas?

4voto

Jonny Puntos 207

Sí, puedes hacer algo así:

try:     
      if arcpy.Exists(PropertyTax_Parcels):
         arcpy.AddMessage("Checking core Layer found? Yes and online")
except:
      raise Exception("Layer not found")

Sólo tienes que definirlo como una capa estática en tu SDE y si es así puede continuar; si no, te sales del script. Hago esto en muchos lugares y de hecho registraré y dispararé mensajes SMTP si mis conexiones se pierden en las aplicaciones principales.

2voto

Tonny Pedersen Puntos 11

Utilícelo para comprobar una conexión SDE válida.

import arcpy

sde = r"C:/Path/To/SDE.sde"

exists = arcpy.Describe(sde).dataType == "Workspace"
if not exists:
   print("Not a workspace ({})".format(sde))

Utilice únicamente arcpy.Exists() una vez que haya verificado que el SDE funciona, ya que no es fiable a menos que se pueda conectar a un SDE.

2voto

JohnMcG Puntos 5062

Otra forma

import arcpy
import sys

from pathlib import Path
from tqdm import tqdm

input = sys.argv[1]
connection_strings = Path(input)

exists = connection_strings.exists()

print(f'{connection_strings.name} found: {exists}')

if not exists:
    sys.exit(0)

sde_files = list(connection_strings.rglob('*.sde'))

print(f'found {len(sde_files)} databases to check')

failures = []

items = tqdm(sde_files)
for connection in items:
    items.set_postfix_str(connection.name)

    try:
        arcpy.ArcSDESQLExecute(str(connection))
    except:
        failures.append(f'{connection.name} is not accessible')

[print(item) for item in failures]

Puedes colocar el python anterior en un archivo llamado test.py y ejecutarlo desde un terminal para validar todos los .sde archivos dentro de una carpeta proporcionada. Asegúrese de instalar primero sus dependencias.

conda create --name sde-tester
activate sde-tester
conda install -c esri arcpy
pip install tqdm

python test.py "c:\projects"

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X