#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)