Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

How do we define SDE Connection for workspace in Python Scripting?

share|improve this question
possible duplicate of How does one access a featurelayer in SDE via Python? – Erica Sep 3 '14 at 14:53
up vote 13 down vote accepted

D.E.Wright just beat me to it, he's right on, use a connection just like in ArcCatalog. But here's my take, done at the Python prompt in ArcMap, using the direct full path to a sde connection file:

>>> import arcpy
>>> arcpy.env.workspace = "C:\\Users\\chad\\AppData\\Roaming\\ESRI\\Desktop10.0\\ArcCatalog\\anrc_water (anrcuser).sde"
>>> fdlist = arcpy.ListDatasets()
>>> for fd in fdlist:
...     print fd


To get the path to my sde connection file, I just right-clicked on my SDE database in the Catalog tree, went to properties, then on the General tab, copy the path from the Name field:

enter image description here

share|improve this answer
Thank you sir I got it now. i really appreciate your help. Thanks a lot. – Ramakrishna Billakanti Nov 14 '11 at 20:07
If you're using the Python window in ArcCatalog to create your scripts, you can drag & drop your connection into the Python window and it will format the path properly. – Timothy Michael Nov 15 '11 at 16:53

Examples 3 through 5 on this page are amazing for this problem:

Here is a simplified version I made that lets me do on the fly connections in python using Sql Server direct connect only.

Description: Utility functions for sde connections

# Import system modules
import arcpy, os, sys

def connect(database, server="<default server>", username="<default user>", password="<default password>", version="SDE.DEFAULT"):
    # Check if value entered for option
        #Usage parameters for spatial database connection to upgrade
        service = "sde:sqlserver:" + server 
        account_authentication = 'DATABASE_AUTH'
        version = version.upper()
        database = database.lower()

        # Check if direct connection
        if service.find(":") <> -1:  #This is direct connect
            ServiceConnFileName = service.replace(":", "")
            ServiceConnFileName = ServiceConnFileName.replace(";", "")
            ServiceConnFileName = ServiceConnFileName.replace("=", "")
            ServiceConnFileName = ServiceConnFileName.replace("/", "")
            ServiceConnFileName = ServiceConnFileName.replace("\\", "")
            sys.exit("\nSyntax for a direct connection in the Service parameter is required for geodatabase upgrade.")

        # Local variables
        Conn_File_NameT = server + "_" + ServiceConnFileName + "_" + database + "_" + username    

        if os.environ.get("TEMP") == None:
            temp = "c:\\temp"   
            temp = os.environ.get("TEMP")

        if os.environ.get("TMP") == None:
            temp = "/usr/tmp"       
            temp = os.environ.get("TMP")  

        Connection_File_Name = temp + os.sep + Conn_File_NameT + ".sde"
        if os.path.isfile(Connection_File_Name):
            return Connection_File_Name

        # Check for the .sde file and delete it if present

        # Variables defined within the script; other variable options commented out at the end of the line
        saveVersionInfo = "SAVE_VERSION" #DO_NOT_SAVE_VERSION

        print "\nCreating ArcSDE Connection File...\n"
        # Process: Create ArcSDE Connection File...
        # Usage: out_folder_path, out_name, server, service, database, account_authentication, username, password, save_username_password, version,   save_version_info
        print temp
        print Conn_File_NameT
        print server
        print service
        print database
        print account_authentication
        print username
        print password
        print saveUserInfo
        print version
        print saveVersionInfo
        arcpy.CreateArcSDEConnectionFile_management(temp, Conn_File_NameT, server, service, database, account_authentication, username, password, saveUserInfo, version, saveVersionInfo)
        for i in range(arcpy.GetMessageCount()):
            if "000565" in arcpy.GetMessage(i):   #Check if database connection was successful
                return Connection_File_Name
    #Check if no value entered for option   
    except SystemExit as e:
        print e.code

Using this script, I can make a connection file on the fly by simply calling:

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

This eliminates the problem of database connection files being inconsistent from machine to machine or user profile to user profile.

share|improve this answer
+1 - very nice implementation! – Chad Cooper Nov 18 '11 at 16:20
Very nice class.... Thanks for sharing – D.E.Wright Nov 18 '11 at 16:45
+1 - Great code even 4 1/2 years later. – Richard Fairhurst Mar 23 at 21:30

You need to define your SDE connection document as you would normally in ArcCatalog; Then you will create the path to the layer in Python like this:

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

This will set your path to where your .SDE file lives, but then you set the path inside that connection to the layer you are looking for. In my case I also set a Year variable.

share|improve this answer
Hi Wright,Thanks for your response i really dont understand what you are saying, I need to run geoprocessing from my local desktop accessing my sde connection on a different server. I have connection created for the sde service on arc catalog. what should i do if want to access data from the sde connection. – Ramakrishna Billakanti Nov 14 '11 at 19:56
Nowadays Esri recommends using os.path.join for joining the .sde connection file (sdeworkspace) variable and the object name. So it will be indata = os.path.join(sdeworkspace,"FeatureClass"). – Alex Tereshenkov Oct 4 '13 at 9:14

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.