পাইথন স্ক্রিপ্টিংয়ে ওয়ার্কস্পেসের জন্য আমরা কীভাবে এসডিই সংযোগটি সংজ্ঞায়িত করব?
পাইথন স্ক্রিপ্টিংয়ে ওয়ার্কস্পেসের জন্য আমরা কীভাবে এসডিই সংযোগটি সংজ্ঞায়িত করব?
উত্তর:
ডুইর্ট আমাকে কেবল এটিকে মারধর করুন, তিনি ঠিক আছেন, আর্কটাগল্যাজের মতো একটি সংযোগ ব্যবহার করুন। তবে এসকি কানেকশন ফাইলের প্রত্যক্ষ পুরো পথ ব্যবহার করে আর্কম্যাপের পাইথন প্রম্পটে এখানে আমার গ্রহণ করা আছে:
>>> 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
>>>
আমার এসডি সংযোগ ফাইলে পাথ পেতে, আমি কেবল ক্যাটালগ ট্রিতে আমার এসডিই ডাটাবেসে ডান ক্লিক করেছি, বৈশিষ্ট্যে গিয়েছিলাম, তারপরে সাধারণ ট্যাবে, নাম ক্ষেত্র থেকে পাথটি অনুলিপি করুন:
এই পৃষ্ঠায় 3 থেকে 5 এর উদাহরণগুলি এই সমস্যার জন্য আশ্চর্যজনক: http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//0017000000q7000000
এখানে আমি তৈরি করা একটি সরলীকৃত সংস্করণ যা আমাকে এসকিএল সার্ভারের সরাসরি সংযোগ ব্যবহার করে পাইথনে ফ্লাই সংযোগগুলি করতে দেয়।
"""
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
এই স্ক্রিপ্টটি ব্যবহার করে, আমি কেবল কল করে ফ্লাইতে একটি সংযোগ ফাইল তৈরি করতে পারি:
import arcpy, sdeconn
myconnect1 = sdeconn.connect("database1", "server")
myconnect2 = sdeconn.connect("database2", "server")
এটি ডেটাবেস সংযোগ ফাইলগুলির মেশিন থেকে মেশিনে বা ব্যবহারকারী প্রোফাইল থেকে ব্যবহারকারী প্রোফাইলে সংবিধানযুক্ত সমস্যাটি দূর করে in
md5.new( server + "_" + ServiceConnFileName + "_" + database + "-" + version + "_" + username + password).hexdigest()
- ফেরতের জন্য পোস্টিংয়ের ইনডেন্টেশনটি ভুল, তাই আমি জানতাম না যে আমার সংযোগটি ব্যর্থ হয়েছে। - কোডটি সংস্করণটিকে আপার ক্ষেত্রে পরিবর্তিত করে, আমার সংস্করণটি লোয়ার কেস
আপনি সাধারণত আপনার এসডিই সংযোগ দস্তাবেজটিকে সংজ্ঞায়িত করতে হবে যেমন আপনি সাধারণত অর্কিগ্ল্যাগলজে করেন; তারপরে আপনি পাইথনের স্তরের দিকে পাথ তৈরি করবেন:
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
এটি আপনার .SDE ফাইলটি যেখানে বাস করে সেখানে আপনার পথ নির্ধারণ করবে, তবে তারপরে আপনি যে স্তরের সন্ধান করছেন সেটির সাথে আপনি সেই সংযোগের ভিতরে পথটি সেট করলেন। আমার ক্ষেত্রে আমি একটি বছরের পরিবর্তনশীলও সেট করেছিলাম।
আপনি সরাসরি আপনার প্রশ্নের মধ্যে সংযোগের পথটি সংজ্ঞায়িত করতে পারেন।
PathSdeConnection= "C:\\Users\\{Username Of windows}\\AppData\\Roaming\\ESRI\\Desktop10.2\\ArcCatalog\\{name of ConenctionString}.sde
এবং এটি অনুসন্ধান এবং ইত্যাদিতে ব্যবহার করুন
with arcpy.da.SearchCursor(PathSdeConnection,("OBJECTID","SHAPE@","SHAPE@JSON"),{WhereClause})as cursor:
for row in cursor:
.
.
.