ORACLE Spatial到SDE
刚刚接触python不就,关于Oracle spatial 到SDE的空间数据操作,基于简单的点线面的。先直接插入基类文件。
#coding:utf-8
import cx_Oracle
import arcpy
from arcpy import env
class cxOracle:
‘’‘tns的取值tnsnames.ora对应的配置项的值,
如:tns = ‘(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.16.18.23)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=MYDB)))’ ‘’’
def init(self ,uname, upwd,tns ):
self._uname = uname
self._upwd = upwd
self._tns = tns
self._conn = None
self._ReConnect()
def _ReConnect(self):
if not self._conn:
self._conn = cx_Oracle.connect(self. _uname, self ._upwd, self._tns)
else:
pass
def __del__(self ):
if self._conn:
self._conn.close()
self._conn = None
def _NewCursor(self):
cur = self._conn.cursor()
if cur:
return cur
else:
print "#Error# Get New Cursor Failed."
return None
def _DelCursor(self, cur):
if cur:
cur.close()
def _PermitedUpdateSql(self, sql):
rt = True
lrsql = sql.lower()
sql_elems = [lrsql.strip().split()]
# update和delete最少有四个单词项
if len( sql_elems) < 4 :
rt = False
# 更新删除语句,判断首单词,不带where语句的sql不予执行
elif sql_elems[0] in [ 'update', 'delete']:
if 'where' not in sql_elems :
rt = False
return rt
def Query(self, sql, nStart = 0, nNum = -1):
'''query data form Oracle'''
print('123')
rt = []
#get cursor
cur = self._NewCursor()
if not cur:
return rt
#查询到列表
cur.execute(sql)
if (nStart == 0) and (nNum == 1 ):
rt.append(cur.fetchone())
else:
rs = cur.fetchall()
if nNum == -1:
rt.extend(rs[nStart])
else:
rt.extend(rs[nStart:nStart + nNum])
self._DelCursor(cur)
return rt
def queryClobBy(self,sql,nameParams={}):
cur = self._NewCursor()
if len(nameParams):
cur.execute(sql,nameParams)
else:
cur.execute(sql)
str_list = []
for i in cur:
# text = i[0].read()
text = i[0]
str_list.append(str(text))
return ''.join(str_list)
de