Learn/Company
[TIL #12] excel <-> db 함수 작성하기!
HannaDev
2022. 2. 23. 22:32
오늘은 어제 주어졌던 함수 작성 Mission 을 마무리하고 체크받는 시간을 가졌습니다.
아직 신입인 만큼 코드 자체보다는 Flask, SQLAlchemy 의 사용법을 스스로 익힐 수 있는가,
코딩 스타일이 어떠한가를 확인하고자 해당 Mission 을 주셨다고 하셨습니다!
어제는 회사 db 를 SQLAlchemy 로 쿼리를 날리는데 삽질을 많이 했지만
다행히 오전 중에 감을 잡아 함수 작성을 마무리했습니다.
리드 개발자님께 체크받기 전에 함수 작성을 마무리해서 정말 다행입니다. (*ˊᵕˋ*)ノ
아래에 작성한 문서는 오늘 작성한 Python 코드를 문서화 해 본 문서입니다.
아직은 코드를 어떻게 문서화해야 할 지 잘 감이 안 잡히네요... ㅎㅎ;;;
내일부터는 실제 업무를 할당해주신다고 하셨는데
문서화도 꾸준히 연습해야겠습니다! _〆(。。)
0. Mission
▶ 개요
회사 Github 레포지토리 develop 브랜치에서 새로운 feature 브랜치 생성.
① excel to db
② db to excel
이 후 회사 db 와 excel 을 연결하는 2개의 함수를 작성하라.
- 작성 위치 : 회사 Github 레포지토리
- Target File : CP 의 정산 정보가 담겨 있는 엑셀 파일이 주어짐.
- DB Table : 윌라 DB 내 테스트용 ‘excel_import_test’ 테이블 생성.
- 터미널에서 해당 Python 파일을 실행하는 방법 (테스트 진행 시 활용)
$ export FLASK_CONFIG=development; export ELASTICSEARCH_DISABLE=true;
python -u manage.py <실행할_파이썬_스크립트_파일명> -<옵션키> "옵션_값"
▶ 핵심 포인트
- '회사 Github 레포지토리 = 회사 코드' 내에서 작성한 함수 코드가 연동되어 돌아가야 한다.
- 회사 코드에 대한 이해도 필요 (Flask, SQLAlchemy…)
▶ 작성한 Python 파일 - 3개의 파일로 분리
- create_cp_db_model.py
- class ExcelData :
- class ExcelSchema(ma.Schema) :
- class CPModel(db.Model) :
- create_cp_db_to_excel.py
- def run(self, **options):
- def parse_excel(self, path: str) -> dict:
- def get_data(self, main_sheet) -> list:
- create_cp_excel_to_db.py
- def run(self, **options):
- def get_data(self) -> list:
- def create_excel(self, path: str, data: [ExcelData]) -> bool:
1. create_cp_db_model.py
- class CPModel(db.Model) :
class CPModel(db.Model):
""" excel 데이터 DB 모델 """
__tablename__ = 'excel_import_test'
...
def __init__(self, cp_name, sum_first_20, sum_second_20,
sum_first_21, sum_7_21, sum_8_21, settlement_period):
...
def __str__(self) -> str:
""" CP 관련 정보들을 가독성 높은 형태의 문자열로 반환한다. """
...
- class ExcelData:
class ExcelData:
""" excel 데이터를 담을 class """
...
def __str__(self) -> str:
...
def check_int_validation(self):
""" CP 정산 정보들을 int or None 으로 만든다. """
@staticmethod
def _get_int_value(target_obj):
""" float or None 형태로 들어오는 정산 정보를 int or None 으로 반환한다. """
- class ExcelSchema(ma.Schema):
- marshmellow 를 사용한 Excel 데이터를 담을 class (추가 학습 필요)
- 작성한 코드에서는 사용되지 않는다.
- 해당 클래스 대신 ExcelData 클래스에 Excel 데이터를 담았지만
실무적으로는 marshmellow 를 사용한다.
2. create_cp_excel_to_db.py
- ‘--path’ or ‘-p’ 옵션을 통해 데이터를 읽을 Excel 파일 경로를 입력해야 한다.
$ Export FLASK_CONFIG=development; ELASTICSEARCH_DISABLE=true;
python -u manage.py create_cp_excel_to_db -p “(파일경로)”
- 해당 Excel 데이터를 파싱해 excel_import_test 테이블에 데이터를 저장한다.
class Command(BaseCommand):
option_list = (
Option('--path', '-p', type=str, help='정산파일경로'),
)
def run(self, **options):
""" path 경로의 excel 파일을 읽어 db excel_import_test 테이블에 저장 """
...
def parse_excel(self, path: str) -> dict:
""" path 경로의 excel 파일을 파싱 """
...
def get_data(self, main_sheet) -> list:
""" 지정된 시트의 excel 데이터를 파싱 -> 객체화 """
...
3. create_cp_db_to_excel.py
- ‘--path’ or ‘-p’ 옵션을 통해 데이터를 저장할 Excel 파일 경로를 입력해야 한다.
$ Export FLASK_CONFIG=development; ELASTICSEARCH_DISABLE=true;
python -u manage.py create_cp_db_to_excel -p “(파일경로)”
- 해당 excel_import_test 테이블 데이터를 읽은 후 Excel 파일을 만들어 저장한다.
class Command(BaseCommand):
option_list = (
Option('--path', '-p', type=str, help='파일저장경로'),
)
def run(self, **options):
""" db excel_import_test 테이블 데이터를 path 경로에 excel 파일로 저장 """
...
def get_data(self) -> list:
""" db excel_import_test 테이블에서 데이터를 가져옴 """
...
def create_excel(self, path: str, data: [ExcelData]) -> bool:
""" path 경로에 excel 파일 생성 """
...