Suite

Espace de travail déjà en mode transaction


J'écris un script pour utiliser un updatecursor. La classe d'entités est verrouillée. Je contrôle donc la version de la base de données, crée une couche d'entités et rapproche les versions. J'ai pris le squelette de mon script à partir de ce fil. Débogage RuntimeError : espace de travail déjà en mode transaction à partir des classes d'entités arcpy.da.UpdateCursor et ArcSDE ?

La principale différence est que j'avais déjà un fichier de connexion SDE dans mon répertoire. Cela doit-il être recréé à chaque exécution du script pour éviter cette erreur ?

__author__ = 'Administrateur' de arcpy import * import GetSRConfig import os import time def GetDateTimeString(n = None): """ formate une datetime en chaîne """ if(n==None): s = time.strftime("% Y%m%d%H%M%S", time.localtime()) else : s = time.strftime("%Y%m%d%H%M%S", time.localtime()) if( (isNumeric(n)==True) and ((n>4) and (n<14))): s = s[0:n] else: s = s[0:14] return s def isNumeric(s) : b = True try: i = float(s) except: # not numericelse: # numeric b= False return b #Locals P6featureName = GetSRConfig.SDELayer Parent = "dbo.DEFAULT" version = "myVersion" + GetDateTimeString(12) featureLyr = "lyr" + GetDateTimeString(12) version imprimée # Server = *** # Service = *** user ="dbo" # Pass = *** # SDE = 'E:C_Drive_filesAdministrator'311Requestdata ServiceRequest.sde' temploc = "" fil = "SDETempConn" env.overwriteOutput = True #Create Version print "Creating version" arcpy.CreateVersion_management (GetSRConfig.SDEConnFile, Parent, version, "PUBLIC") VersionName = user.upper() + "." + version #Create new connection workspace = os.path.join (temploc, fil + ".sde") print workspace #Layers P6feature = os.path.join (workspace, P6featureName) arcpy.MakeFeatureLayer_management (GetSRConfig.SDELayer, featureLyr) # Commencer l'édition print "Initiation de l'édition" edit = arcpy.da.Editor (GetSRConfig.SDEConnFile) edit.startEditing () edit.startOperation() #Test Cursor print "Test du curseur" P6Cursor = arcpy.da.UpdateCursor (featureLyr, ["VehicleNam "]) pour la ligne dans P6Cursor : print row[0] del row del P6Cursor #Stop/save edits edit.stopOperation() print "Arrêter l'édition" edit.stopEditing("True") #Passer à la version print "Changement de version" arcpy .ChangeVersion_management(featureLyr, "TRANSACTIONAL", Parent) #Reconcile and post print "Reconciling and posting" arcpy.ReconcileVersions_management (GetSRConfig.SDEConnFile, "", Parent, VersionName, with_post = "POST", with_delete = "DELETE_VERSION")

Vous voudrez peut-être vérifier votre gestionnaire de licence ou votre connexion à celui-ci.

Je viens de commencer à rencontrer ce problème au milieu d'une session de codage python. Les choses fonctionnaient bien jusqu'à ce que tout à coup, je commence à tirer cette erreur lors de l'"import arcpy". Plus précisément sur la partie env.

J'ai découvert qu'il y a un problème entre moi et nos gestionnaires de licence. Je suis VPN sur notre réseau. Lorsque j'utilise à distance mon bureau, tout va bien. Lorsque j'essaie de me connecter via ArcGIS Administrator à nos deux gestionnaires de licences, j'obtiens des résultats intermittents.
Je suis l'administrateur système des LM et lorsqu'ils sont connectés directement à eux, ils ne présentent aucun problème.

Dans mon cas, le problème est lié au tunnel VPN et aux LM.


Après avoir passé des heures à résoudre ce problème, j'ai trouvé ce qui suit.

  1. Vérifiez si la base de données est versionnée ou non versionnée.
  2. Évitez d'utiliser le curseur imbriqué. Assurez-vous de relâcher tous les curseurs et objets de ligne dès que vous en avez terminé avec eux.
  3. Un petit travail autour duquel j'ai utilisé après avoir lutté dans un scénario de curseur imbriqué : - J'avais créé un objet de calque comme celui-ci :arcpy.SelectLayerByAttribute_management(inputFC, 'my_lyr', ""FieldName" = '" + SearchValue+ "'")et supprimé mon curseur de recherche. Cela a servi mon objectif d'éviter le scénario de curseur imbriqué et j'ai commencé à obtenir des objets filtrés, puis je l'ai utilisé pour obtenir le résultat souhaité (opérations d'insertion et de mise à jour).
  4. Si la base de données n'est pas versionnée, assurez-vous d'utiliser le code suivant.edit.startEditing(True, False) edit.startOperation()
  5. UtilisationAvecmot-clé pouravec arcpy.da.SearchCursor/arcpy.da.InsertCursorle curseur. Cela garantira que votre mémoire se libère de manière appropriée sans utiliserdelmot-clé
  6. siedit.stopEditing()opération vous donnant du fil à retordre (SystemError : retour d'erreur sans jeu d'exception : ) puis commentez-le. (Drôle mais le fait est que mon script a fonctionné si j'exécute le code de manière autonome ex: invite de commande ou pyscriptor Cependant, dès que j'ai converti mon script en service GP, il a commencé à me donner une erreur, j'ai donc commentéedit.stopEditing()et déplacé alors que les données étaient enregistrées dans la base de données), je crois que c'est quelque chose avec la version python qui est utilisée dans ArcMAP et ArcPy mais n'obtient jamais l'explication complète.


Voir la vidéo: SQL Server: réduire la taille du journal de transactions sur disque (Octobre 2021).