python Settings.py
data = open("D:/ini/tnsnames.ora", 'r', encoding='utf-8')
tnsnames_orgn = data.read()
tnsnames = tnsnames_orgn.replace(" ","").replace("\n","")
# sList = tns.read() # read file into string
sList = tnsnames_orgn # read file into string
sList = re.sub("#.*\n","",sList) # strip all comments
sList = re.sub("\(.*\n","",sList) # remove "(" to end of line
sList = re.sub("\)","",sList) # clean up ")"
sList = re.sub(" ","",sList) # remove spaces
sList = re.sub("\n","",sList) # remove carriage returns
sList = re.sub("=$","",sList) # remove last "="
sList = sList.split("=") # create list
data.close()
tns_item = {}
i = 0
while i < len(sList):
t1 = tnsnames.find(sList[i])
if(i< len(sList)-1):
t2 = tnsnames.find(sList[i+1])
tns1 = tnsnames[t1+len(sList[i])+1:t2]
else:
tns1 = tnsnames[t1 + len(sList[i]) + 1:]
keys = sList[i].split(",")
for key in keys:
tns_item[key]=tns1
i += 1
print(tns_item)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.oracle',
'NAME': tns_item['FCS_MAIN'],
'USER': 'SAMPLE',
'PASSWORD': 'SAMPLE',
'TIMEOUT':5
}
}
tnsnames.ora
FCS_MAIN = (DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(Host = 127.0.0.1)(Port = 41521))
)
(CONNECT_DATA =
(SERVICE_NAME = XE)
)
)
FDWQA1.wmata.com, FDWQA1 = (DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(Host = 127.0.0.1)(Port = 41521))
)
(CONNECT_DATA =
(SERVICE_NAME = XE)
)
)
django 에서 cx_oracle 라이브러리로 String 형식의 tnsnames 옵션을 사용 할 수가 있으나 실제 tnsnames.ora 파일을 사용하는 것은 또다른 문제가 있다.
해당 파일을 읽어서 스트링 형식으로 분할하여 dict에 저장하여 사용한다. 다중 앨리어스 등 추가로 구분하여 저장하였다.
분할 방식은 급해서 좀 어거지 방식으로 만들었음.
코드 참조 :
HuckleberryDBA: Parse Oracle tnsnames.ora into alias list using Python