Як можна отримати доступ до функціонального рівня в SDE через Python?


12

Я намагаюся використовувати Arcpy для запуску сценарію CopyFeatures_management, щоб я могла скопіювати функціональний шар у SDE.

Що я використовую для цього вводу (і виводу, оскільки я буду копіювати шар назад до SDE) для доступу до шару?

Відповіді:


11

Ви будете використовувати шлях до файлу SDE плюс ім'я класу функцій, тому щось подібне

CopyFeatures_management(r'c:\connections\my.sde\fc1', r'c:\connections\my.sde\newfc')


4
І 'r' перед текстом робить те саме, що в Python, як '@' у C #, тобто трактує рядок як буквальний, тому '\' не неправильно трактуються як контрольні символи?
Майкл Тодд

2
Правильно. Позначає рядок як буквальний без контрольних символів.
Jason Scheirer

16

Я думаю про два способи, які стосуються того, що в ArcCatalog вже встановлено підключення до бази даних. Якщо файл підключення до бази даних ще не існує, ви можете використовувати CreateArcSDEConnectionFile_management у своєму сценарії для його створення.

1) Встановіть поточну робочу область на підключення до бази даних, а потім зверніться до класу функцій за назвою.

arcpy.env.workspace = r"Database Connections\MySDEDatabaseConnection.sde"
fc = "SDE.myFeatureClass"

Якщо клас об'єктів знаходиться в наборі даних, торкніться назви набору даних функції в робочій області так:

arcpy.env.workspace = r"Database Connections\MySDEDatabaseConnection.sde\SDE.MyFeatureDataset"

2) Надайте повний шлях до класу функцій, включаючи підключення до бази даних:

fc = r"Database Connections\MySDEDatabaseConnection.sde\SDE.MyFeatureDataset\SDE.MyFeatureClass"

Деякі інструменти потребують першого методу, інші вимагають другого.

Також "Підключення до бази даних" - це фактично лише ярлик до %APPDATA%\ESRI\Desktop10.0\ArcCatalog(для ArcGIS 10 для Windows XP). Ви можете так само легко надати повний шлях до файлів .sde, які зберігаються у цій папці чи інших папках.


Попереджуючи іншими мовами, ви будете змінювати "Підключення до бази даних" словами відповідно до вашої мови програмного забезпечення, що використовується в системі. У моєму (оскільки я французький) зв’язок такий: fc = r"Connexions aux bases de données\MySDEDatabaseConnection.sde\SDE.MyFeatureDataset\SDE.MyFeatureClass"
GeoStoneMarten

гаразд, що робити, якщо мені потрібно використовувати рівень 1 з бази даних 1 і відключити його до другого рівня в базі даних 2. як мені обробляти env.workspace, якщо є дві окремі робочі області?
NULL.Dude

1

Відповідно до мого попереднього коментаря, у мене є інша пропозиція, щоб безпечно отримати доступ до набору даних та класів функцій

# catalog local and arcgis version
arcgis_version = arcpy.GetInstallInfo()['Version'].split(
    ".")  # liste v_majeur,v_mineur
catalog_path = "{}\\ESRI\\Desktop{}\\ArcCatalog".format(
    os.getenv('APPDATA'), ".".join(
        arcpy.GetInstallInfo()['Version'].split(".")[:2])) # Work with Arcgis >= 10.3
conn = {}
conn["out_folder_path"] = catalog_path
conn["out_name"] = "server_x_db_user.sde"
conn["database_platform"] = "SQL_SERVER"
conn["instance"] = "server_x"
conn["account_authentication"] = "DATABASE_AUTH"
conn["database"] = "bdd"
conn["username"] = "db_user"
conn["password"] = "MydbPasS@"
conn["save_user_pass"] = "SAVE_USERNAME"

arcpy.CreateDatabaseConnection_management(**conn)
#result
# >>> <Result 'C:\\Users\\me\\AppData\\Roaming\\ESRI\\Desktop10.4\\ArcCatalog\\server_x_db_user.sde'>
desc = arcpy.Describe(os.path.join(conn["out_folder_path"],conn["out_name"]) 
# you can also pass by arcpy.Result object
arcpy.env.workspace = os.path.join(desc.path, desc.name)
#safe env for arcCatalog sde folder

print arcpy.env.workspace 
# >>> u'Connexions aux bases de donn\xe9es\\server_x_db_user.sde'

for ds in arcpy.ListDatasets(feature_type='feature') + ['']:
    for fc in arcpy.ListFeatureClasses(feature_dataset=ds):
        print fc
        # Remove empty dataset to get valid path
        path = os.path.join(
            *[v for v in [arcpy.env.workspace, ds, fc] if v])
        print path

результат ФК:

bdd.user_db.bndy_lv_municipal_sector
bdd.user_db.bndy_admin_lv_municipal
bdd.user_db.water_pg
bdd.user_db.water_pl

доступ до результату за допомогою шляху:

Connexions aux bases de données\server_x_db_user.sde\bdd.user_db.bndy_lv_municipal_sector
Connexions aux bases de données\server_x_db_user.sde\bdd.user_db.bndy_admin_lv_municipal
Connexions aux bases de données\server_x_db_user.sde\bdd.user_db.water_pg
Connexions aux bases de données\server_x_db_user.sde\bdd.user_db.water_pl
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.