[GIS] ListFeature classes in SDE

arcgis-10.1arcpyenterprise-geodatabase

I have this code:

def backSDE(ActiveSDE):
    arcpy.env.overwriteOutput = True
    arcpy.env.workspace = ActiveSDE
    fcs = arcpy.ListFeatureClasses()
    print fcs

#Databases
ActiveSDE = r"C:\Users\me\AppData\Roaming\ESRI\Desktop10.1\ArcCatalog\SERVER_SQLEXPRESS.gds\Client_Survey"
backSDE(ActiveSDE)

The database only has feature classes inside of it. No datasets. When I run this I get "None" in the python interpreter. There should be 10 feature classes. What am I doing wrong? I'm running ArcMap 10.1


UPDATED (2)

I now have this code

def listFcsInGDB():
    ''' set your arcpy.env.workspace to a gdb before calling '''
    for fds in arcpy.ListDatasets('','feature') + ['']:
        for fc in arcpy.ListFeatureClasses('','',fds):
            yield os.path.join(arcpy.env.workspace, fds, fc)

#Set workspace environment to geodatabase
arcpy.env.workspace = r"C:\Users\me\AppData\Roaming\ESRI\Desktop10.1\ArcCatalog\PETROPAM_SQLEXPRESS.gds\Client_Surve"

#Get list of feature classes in geodatabase
#FCs = arcpy.ListFeatureClasses()
FCs = listFcsInGDB()

 #Loop through feature classes in list
for FC in FCs:

     #Print the feature class name
     arcpy.AddMessage(FC)

This is the error message it gives me on this line from above:
for fds in arcpy.ListDatasets('','feature') + ['']:


UPDATED (3):

Here is my updated code that lists the feature classes from the database connection file.

import arcpy
import os

arcpy.env.workspace = r"C:\Users\me\AppData\Roaming\ESRI\Desktop10.1\ArcCatalog\PFS_Survey.sde"
def listFcsInGDB():
    ''' set your arcpy.env.workspace to a gdb before calling '''
    for fds in arcpy.ListDatasets('','feature') + ['']:
        for fc in arcpy.ListFeatureClasses('','',fds):
            yield os.path.join(arcpy.env.workspace, fds, fc)

#Set workspace environment to geodatabase
arcpy.env.workspace = r"C:\Users\me\AppData\Roaming\ESRI\Desktop10.1\ArcCatalog\PFS_Survey.sde"

#Get list of feature classes in geodatabase
#FCs = arcpy.ListFeatureClasses()
FCs = listFcsInGDB()

 #Loop through feature classes in list
for FC in FCs:

     #Print the feature class name
     arcpy.AddMessage(FC)
     print FC
     arcpy.CopyFeatures_management(FC, "C:/Users/me/Desktop/" + os.path.basename(FC).split('.')[0] + ".shp")

It outputs this:

C:\Users\me\AppData\Roaming\ESRI\Desktop10.1\ArcCatalog\Survey.sde\Client_Survey.DBO.CO_Arapahoe
C:\Users\me\AppData\Roaming\ESRI\Desktop10.1\ArcCatalog\Survey.sde\Client_Survey.DBO.CO_Montezuma
C:\Users\me\AppData\Roaming\ESRI\Desktop10.1\ArcCatalog\Survey.sde\Client_Survey.DBO.CO_Weld
C:\Users\me\AppData\Roaming\ESRI\Desktop10.1\ArcCatalog\Survey.sde\Client_Survey.DBO.Wy_Converse

The problem now is trying to copy it out of the list. I've updated my code to how I want to copy it, but the ListFeature classes has two decimals in the code.

UPDATE 4

I'm starting a new question that is somewhat based off of this one, but different enough to be in a new page. I will link once it's up.

Here's the link to the question about copying several sde connections.
Backup several SDE database connections

Best Answer

I have some modified code that lists all feature classes, with or without feature datasets.

Try this:

import arcpy
import os

def listFcsInGDB():
    ''' set your arcpy.env.workspace to a gdb before calling '''
    for fds in arcpy.ListDatasets('','feature') + ['']:
        for fc in arcpy.ListFeatureClasses('','',fds):
            yield os.path.join(arcpy.env.workspace, fds, fc)

#Set workspace environment to geodatabase
arcpy.env.workspace = "Database Connections\\GISDev.sde\\"

#Get list of feature classes in geodatabase
#FCs = arcpy.ListFeatureClasses()
FCs = listFcsInGDB()

 #Loop through feature classes in list
for FC in FCs:

     #Print the feature class name
     arcpy.AddMessage(FC)
Related Question