Bagaimana kita mendefinisikan Koneksi SDE untuk ruang kerja dalam Python Scripting?
Bagaimana kita mendefinisikan Koneksi SDE untuk ruang kerja dalam Python Scripting?
Jawaban:
DEWright baru saja mengalahkan saya untuk itu, dia benar, gunakan koneksi seperti di ArcCatalog. Tapi inilah pendapat saya, dilakukan pada prompt Python di ArcMap, menggunakan path lengkap langsung ke file koneksi sde:
>>> 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
...
anrc_water.DBO.ChadTest
anrc_water.DBO.Temp_Data
anrc_water.DBO.Master_Datasets
ANRC_WATER.DBO.ENF_FILL_FACC
ANRC_WATER.DBO.ENF_FILL_FDIR
>>>
Untuk mendapatkan path ke file koneksi sde saya, saya hanya mengklik kanan pada database SDE saya di pohon Katalog, pergi ke properti, lalu pada tab General, salin path dari bidang Nama:
Contoh 3 hingga 5 di halaman ini luar biasa untuk masalah ini: http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//001700000000700000000
Ini adalah versi sederhana yang saya buat yang memungkinkan saya melakukan koneksi fly in python hanya menggunakan Sql Server direct connect saja.
"""
Name: sdeconn.py
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
try:
#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("\\", "")
else:
arcpy.AddMessage("\n+++++++++")
arcpy.AddMessage("Exiting!!")
arcpy.AddMessage("+++++++++")
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"
else:
temp = os.environ.get("TEMP")
if os.environ.get("TMP") == None:
temp = "/usr/tmp"
else:
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
arcpy.env.overwriteOutput=True
# Variables defined within the script; other variable options commented out at the end of the line
saveUserInfo = "SAVE_USERNAME" #DO_NOT_SAVE_USERNAME
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
arcpy.AddReturnMessage(i)
arcpy.AddMessage("\n+++++++++")
arcpy.AddMessage("Exiting!!")
arcpy.AddMessage("+++++++++\n")
sys.exit(3)
else:
arcpy.AddReturnMessage(i)
arcpy.AddMessage("+++++++++\n")
return Connection_File_Name
#Check if no value entered for option
except SystemExit as e:
print e.code
return
Dengan menggunakan skrip ini, saya dapat membuat file koneksi dengan cepat hanya dengan menelepon:
import arcpy, sdeconn
myconnect1 = sdeconn.connect("database1", "server")
myconnect2 = sdeconn.connect("database2", "server")
Ini menghilangkan masalah file koneksi database yang tidak konsisten dari mesin ke mesin atau profil pengguna ke profil pengguna.
md5.new( server + "_" + ServiceConnFileName + "_" + database + "-" + version + "_" + username + password).hexdigest()
- Lekukan pada postingan pengembalian tidak benar, jadi saya tidak tahu koneksi saya gagal. - Kode mengubah versi ke huruf besar, versi saya huruf kecil
Anda perlu mendefinisikan dokumen koneksi SDE Anda seperti biasanya di ArcCatalog; Maka Anda akan membuat path ke layer di Python seperti ini:
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
Ini akan mengatur jalur Anda ke tempat file .SDE Anda tinggal, tetapi kemudian Anda menetapkan jalur di dalam koneksi itu ke lapisan yang Anda cari. Dalam kasus saya, saya juga menetapkan variabel Tahun.
Anda juga dapat menentukan jalur koneksi langsung di Permintaan Anda.
PathSdeConnection= "C:\\Users\\{Username Of windows}\\AppData\\Roaming\\ESRI\\Desktop10.2\\ArcCatalog\\{name of ConenctionString}.sde
dan menggunakannya dalam Pencarian dan lain-lain
with arcpy.da.SearchCursor(PathSdeConnection,("OBJECTID","SHAPE@","SHAPE@JSON"),{WhereClause})as cursor:
for row in cursor:
.
.
.