본문 바로가기

django_python

django에서 oracle tnsnames.ora 파일 사용

 

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