본문 바로가기
Programming/Python

[Python] colab에서 폴더 생성하고 sqlite3로 테이블 생성하기 with logging

by AI_Wooah 2022. 3. 15.

코랩은 기존 프레임워크에서 실행문을 위에 쓰고 함수를 아래 쓰는 방식과 다르게

함수가 위에 있고 실행문이 아래에 있어야 한다.

 

먼저 필요한 라이브러리들을 import 한다.

 

로깅은 소프트웨어를 실행할 때 발생하는 이벤트를 기록하고 추적하기 위해 사용한다.

로그를 찍어줄 로거를 생성하고 config 설정에서 로그 중요도 수준(level)을 설정할 수 있다.

보통은 level=DEBUG를 사용하지만 여기서는 print 찍듯이 로그만 보고 모든 실행 현황을 파악할 수 있도록 info 수준까지 찍어주려고 한다.

코랩에서는 지나간 로그를 보기가 까다로워서 파일로 저장해준 후 덮어쓰기인 filemode='a'로 해준다.

자세한 설정은 아래 설명을 참고한다.


level 설명
DEBUG 상세한 정보. 보통 문제를 진단할 때만 필요합니다.
INFO 예상대로 작동하는지에 대한 확인.
WARNING 예상치 못한 일이 발생했거나 가까운 미래에 발생할 문제(예를 들어 〈디스크 공간 부족〉)에 대한 표시. 소프트웨어는 여전히 예상대로 작동합니다.
ERROR 더욱 심각한 문제로 인해, 소프트웨어가 일부 기능을 수행하지 못했습니다.
CRITICAL 심각한 에러. 프로그램 자체가 계속 실행되지 않을 수 있음을 나타냅니다.

 

 

그 후 변수를 생성해 값을 설정해준다,

 

import os, sys
import sqlite3
import traceback
import logging
logger = logging.getLogger('wpg_logger')
logging.basicConfig(encoding='utf-8', level=logging.INFO, format='%(levelname)s:%(name)s:%(asctime)s:%(message)s', filename='./logger.log', filemode='a')
logger.info('[Start]')
# 현재 경로 확인
# path=os.getcwd()
# print(path)

rootPath="./"
sqlDir="/sql"
attachDir="/attachment"
dbFileName="wpg_file.db"

 

DB 접속 후 테이블을 생성하는 함수를 작성한다.

logger.info('[createDB]')
## DB 접속 및 테이블 생성
def createDB(sqlDirPath):
  dbFilePath = sqlDirPath + "/" + dbFileName
  logger.info('[createDB]dbFilePath: ' + dbFilePath)
  # DB 접속 및 생성
  conn = sqlite3.connect(dbFilePath, isolation_level=None)
  logger.info('[createDB] conn success')
  # SQL 테이블 생성문
  createWpgSql = "CREATE TABLE IF NOT EXISTS wpgFile ([id] INTEGER PRIMARY KEY AUTOINCREMENT, [title] TEXT, [auth] TEXT, [reg_dt] DATETIME, [filePath] TEXT)"
  logger.info('[createDB]createWpgSql: ' + createWpgSql)
  # 테이블 생성
  try:
    cur = conn.cursor()
    logger.info('[createDB] cur success')
    cur.execute(createWpgSql)
    logger.info('[createDB] execute completed')
  except sqlite3.Error as e:
    logger.error('[sqlite3.Error] SQLite error: %s' % (' '.join(e.args)))
    logger.error('[sqlite3.Error] Exception class is: ' + e.__class__)
    logger.error('[sqlite3.Error] SQLite traceback: ')
    exc_type, exc_value, exc_tb = sys.exc_info()
    logger.error('[sqlite3.Error] '+ traceback.format_exception(exc_type, exc_value, exc_tb))

 

폴더가 원하는 위치에 있는지 확인한 후 있으면 DB 접속하는 함수를 부르고

없으면 폴더를 만들고 나서 DB접속하는 함수를 부른다.

logger.info('[makeDir]')
# 폴더 체크 후 없으면 생성
def makeDir(rootPath, sqlDir): 
  # root 경로에 원하는 폴더 이름 합치기
  sqlDirPath = rootPath + "/" + sqlDir
  # sqlDirPath에 폴더가 있는지 확인
  if os.path.exists(sqlDirPath):
    logger.info('[makeDir] exists sqlDirPath : '+ sqlDirPath)
    # 폴더가 있는 것이 확인되면 파일 체크
    createDB(sqlDirPath)
  else:
    # folderPath에 원하는 폴더가 없으면 생성 시도
    try:
      os.makedirs(sqlDirPath)
      logger.info('[makeDir] makedirs success : ' + sqlDirPath)
      # 폴더를 만들고 파일 생성
      createDB(sqlDirPath)
    except OSError:
      logger.info('[makeDir] Error: Creating directory. ' + sqlDirPath)
      print('Error: Creating directory. ' +  sqlDirPath)

 

마지막으로 파일 생성 함수를 실행하는 로직을 실행시켜준다.

################################
# logic
logger.info('[logic]logic start')
# 파일 생성
makeDir(rootPath, sqlDir)

 

 

성공하면

아래처럼 폴더와 파일이 생성된다

 

그리고 logger.log를 열어보면 아래처럼 생성되어있다.

INFO:wpg_logger:2022-03-15 10:40:01,526:[Start]
INFO:wpg_logger:2022-03-15 10:40:03,021:[createDB]
INFO:wpg_logger:2022-03-15 10:40:04,855:[makeDir]
INFO:wpg_logger:2022-03-15 10:40:06,879:[logic]logic start
INFO:wpg_logger:2022-03-15 10:40:06,879:[makeDir] exists sqlDirPath : .///sql
INFO:wpg_logger:2022-03-15 10:40:06,879:[createDB]dbFilePath: .///sql/wpg_file.db
INFO:wpg_logger:2022-03-15 10:40:06,879:[createDB]conn success
INFO:wpg_logger:2022-03-15 10:40:06,880:[createDB]createWpgSql: CREATE TABLE IF NOT EXISTS wpgFile ([id] INTEGER PRIMARY KEY AUTOINCREMENT, [title] TEXT, [auth] TEXT, [reg_dt] DATETIME, [filePath] TEXT)
INFO:wpg_logger:2022-03-15 10:40:06,880:[createDB] cur success
INFO:wpg_logger:2022-03-15 10:40:06,880:[createDB] execute completed

 

sql/***_file.db 를 열어보면 이렇게 생겼다. 하지만 select는 잘된다.

 

 

반응형

댓글