| #Name: Python ArcPy Connect to SDE and versions | |
| #Author: Bryan McIntosh | |
| #Description: An approach to connect to SDE, create a new version, and change | |
| # to the new version - inside a python script. | |
| import arcpy, datetime, os, tempfile, shutil | |
| #Create a string of the date to append to version name (to keep unique) | |
| now = datetime.datetime.now() | |
| strDate = str(now.year) + str(now.month) + str(now.day) + str(now.hour) + str(now.minute) + str(now.second) | |
| #Create a temp directory using tempfile module to store SDE connection files | |
| sdeTempPath = tempfile.mkdtemp() | |
| #Setup first SDE Connection | |
| arcpy.CreateDatabaseConnection_management(sdeTempPath,'ConnName.sde','SQL_SERVER','db\\instance','OPERATING_SYSTEM_AUTH','#', '#', '#','DBName') | |
| ##Create a new version (default as parent version) | |
| sdeVersionName = 'MyVersion_' + strDate | |
| arcpy.CreateVersion_management(sdeTempPath + os.sep + 'ConnName.sde', 'prefixName.DEFAULT', sdeVersionName, 'PUBLIC') | |
| #The prefix of the version name isn't known (based on user), so need to find it so we can connect later | |
| sdeVersionNameFULL = '' | |
| for version in arcpy.da.ListVersions(sdeTempPath + os.sep + 'ConnName.sde'): | |
| if version.name.split('.')[1] == sdeVersionName and not version.children: | |
| sdeVersionNameFULL = version.name.split('.')[0] + '.' + sdeVersionName | |
| arcpy.AddMessage('Version verified: ' + sdeVersionNameFULL) | |
| ##Create new connection file pointing to the new version | |
| arcpy.CreateDatabaseConnection_management(sdeTempPath,'ConnVersion.sde','SQL_SERVER','db\\instance','OPERATING_SYSTEM_AUTH','#', '#', '#','DBName','#','#', sdeVersionNameFULL) | |
| ##DO STUFF WITH THE NEW VERSION | |
| ##DO STUFF WITH THE NEW VERSION | |
| ##When done, Remove the temp path containing connection files | |
| shutil.rmtree(sdeTempPath) |