⏰ 2024.12.24 (D+54)
configparser 모듈을 사용하여 oracle.ini 파일을 관리[ORACLE]
user=PYTHON
password=PYTHON
url=localhost:1521/XEPDB1
ConfigParser객체를 사용하여 INI 파일을 읽고, 섹션과 키 값들을 관리ConfigParser객체를 통해 INI 파일을 읽고, 섹션에 포함된 키-값 쌍을 읽을 수 있다
cx_Oracle을 사용하여 Oracle 데이터베이스에 연결하고, CRUD 작업을 수행하는 로직✅
connectDatabase() 함수
configparser를 사용하여oracle.ini파일에서 데이터베이스 연결 정보를 읽어cx_Oracle.connect()로 데이터베이스 연결을 설정✅
insert() 함수
- 사용자로부터 입력받은 데이터를
INSERT쿼리로 데이터베이스에 삽입✅
findById() 함수
- 특정
id로 데이터를 조회✅
update() 함수
- 주어진
id에 해당하는 데이터를 수정✅
delete() 함수
- 주어진
id에 해당하는 데이터를 삭제✅
findAll() 함수
- 모든 데이터를 조회하여 반환
💡 사용자가 프로그램과 상호작용할 수 있도록 메뉴와 입력을 처리하는 UI를 담당
✅
showMenu() 함수
- CRUD 작업을 위한 메뉴를 표시하고, 사용자가 선택한 메뉴 번호를 반환
✅
inputData() 함수
- 사용자가 입력한 여러 값을 리스트로 받아온다
✅
showMessage() 함수
- 사용자에게 메시지를 표시하고, 입력을 받는다. (예: 수정, 삭제할 ID 입력)
✅
showRecords() 함수
- 데이터베이스에서 가져온 레코드를 출력, 각 항목을 보기 좋게 포맷하여 출력
☑️ 메뉴 선택
- 사용자가 프로그램을 실행하면, 메뉴가 표시되고, 번호를 입력하여
CRUD작업을 선택☑️ 입력
- 사용자가 입력값을 입력하여
insert() 함수를 통해 데이터를 추가☑️ 수정
- 사용자가 수정할 id를 입력하고,
update() 함수를 통해 해당 데이터를 수정☑️ 삭제
- 사용자가 삭제할 id를 입력하고,
delete() 함수를 통해 데이터를 삭제☑️ 조회
- 사용자가 선택한 메뉴에 따라
findAll() 함수를 통해 모든 데이터를 조회하고 출력☑️ 종료
9번메뉴를 선택하면 프로그램이 종료
view.py: 사용자의 입력을 받아 화면에 출력합니다.showMenu, inputData, showRecords, showMessage 등)model.py: 실제 데이터베이스와 상호작용하는 로직을 담당합니다.insert, update, delete, findAll, connectDatabase, close 등)constants.py: 상수 데이터를 저장하는 파일로, 테이블의 필드명(MEMBERS_TABLE_DESC)을 관리합니다.☑️ 프로그램이 실행되면 view.py에서 메뉴를 보여주고, 사용자가 메뉴를 선택
☑️ 사용자가 선택한 메뉴에 따라 model.py에 정의된 함수들이 호출되어 데이터베이스 작업이 처리
☑️ 데이터베이스 작업 후, 결과가 화면에 출력
☑️ configparser를 사용하여 데이터베이스 연결 정보를 외부 설정 파일에서 읽어기
# config.ini 파일
[ORACLE]
user=PYTHON
password=PYTHON
url=localhost:1521/XEPDB1
# model.py 파일
from configparser import ConfigParser
from cx_Oracle import connect
def connectDatabase():
config = ConfigParser()
config.read('oracle.ini', encoding='utf8')
return connect(user=config.get('ORACLE', 'user'),
password=config.get('ORACLE', 'password'),
dsn=config.get('ORACLE', 'url'),
encoding='utf8')
def close(conn):
if conn: conn.close()
def insert(conn, dict_):
with conn.cursor() as cursor:
try:
cursor.executemany('INSERT INTO member(id,name,age) VALUES(SEQ_MEMBER.NEXTVAL,:name,:age)', [dict_])
conn.commit()
return cursor.rowcount
except Exception as e:
print('입력시 오류:', e, sep='')
return 0
def findById(conn, id):
with conn.cursor() as cursor:
try:
cursor.execute('SELECT * FROM member WHERE id=:id', [id])
return cursor.fetchone()
except Exception as e:
print('하나 조회시 에러:', e, sep='')
return None
def update(conn, dict_):
with conn.cursor() as cursor:
try:
cursor.execute('UPDATE member SET name=:name,age=:age WHERE id=:id', dict_)
conn.commit()
return cursor.rowcount
except Exception as e:
print('수정시 오류:', e, sep='')
return 0
def delete(conn, id):
with conn.cursor() as cursor:
try:
cursor.execute('DELETE member WHERE id=:id', id)
conn.commit()
return cursor.rowcount
except Exception as e:
print('삭제시 오류:', e, sep='')
return 0
def findAll(conn):
with conn.cursor() as cursor:
try:
cursor.execute('SELECT * FROM member ORDER BY id DESC')
return cursor.fetchall()
except Exception as e:
print('모든 목록 조회시 에러:', e, sep='')
return None
# view.py 파일
def showMenu():
print('=' * 70)
print('1.입력(CREATE) 2.수정(UPDATE) 3.삭제(DELETE) 4.조회(READ) 9.종료')
print('=' * 70)
return int(input('메뉴 번호 입력?'))
def inputData(*args):
list_ = []
for arg in args:
list_.append(input(f'{arg}를(을) 입력하세요?'))
return list_
def showMessage(titleMessage):
return input(f'{titleMessage}하려는 번호를 입력하세요?')
def showRecords(records):
print('%-10s%-10s%-10s%s' % ('번호', '이름', '나이', '가입일'))
print('=' * 70)
for id, name, age, joindate in records:
print('%-10s%-10s%-10s%s' % (id, name, age, str(joindate)[:10]))
print('=' * 70)
model.py는 실제 데이터베이스 작업을 처리view.py는 사용자와의 상호작용을 담당