python으로 스키마 정보 없이 sqlite3 데이터 읽기
- basic/데이터베이스
- 2019. 8. 1.
sqlite3는 .db파일로 데이터를 저장합니다.
.db파일만 있는 경우에 데이터를 읽는 방법을 소개합니다.
1. sqlite3 db파일을 구조를 모르는 상태에서 읽어야 하게된 이유
github에서 트렌드를 살펴보기 위해서 explore 버튼을 눌러서 구경을 하고 있었습니다.
그러다 amazon에 들어가기 위한 노력을 정리해 놓은 github을 발견했는데,
Flash카드라는 것으로 인터뷰 질문 답변을 정리했다고 했습니다.
https://github.com/jwasham/coding-interview-university
jwasham/coding-interview-university
A complete computer science study plan to become a software engineer. - jwasham/coding-interview-university
github.com
My flash cards database를 클릭해서 들어가니까 .db형태의 파일이었습니다.
2. 파일 형태 추측 및 확인하기
.db파일의 내용이 궁금했고, .db파일이기 때문에 경험적으로 sqlite3 파일임을 짐작했고,
hexeditor로 열어보았습니다.
역시나 예상대로 sqlite3 파일이었고,
python은 sqlite3 모듈이 내장 모듈로 들어가 있기 때문에, python으로 열어보겠습니다.
3. python에서 DB 스키마 확인
위와 같이 db파일에는 cards라는 테이블이 하나 들어있었고, id, type, front, back, known이라는 컬럼이 각각 있었던 것을 확인했습니다.
4. 데이터 읽기
플래쉬 카드는 질문 답변으로 이루어져 있는데, 대게 두괄식으로 답변을 먼저 말하고 왜 그런지를 설명하는 것을 확인할 수 있었습니다.
마지막에 cur.close()와 conn.close()가 있는 이유는 그냥 python을 종료해도 파이썬이 자동으로 변수의 메모리를 해제해 주겠지만, 습관을 형성하기 위해서 의도적으로 작성했습니다.
5. 코드 정리
import sqlite3
FILE_NAME = '' # 확장자 .db까지 입력하기
conn = sqlite3.connect(FILE_NAME) # 연결 형성
cur = conn.cursor() # 커서 형성
sql = 'select * from sqlite_master' # 쿼리문 작성
# sql = "select * from sqlite_master where type='table'"
cur.execute(sql) # 쿼리 실행
r = cur.fetchall() # 한꺼번에 읽기, fetchone()으로 하나씩 읽으면서 for문 돌기 가능
print(r[0][4]) # 조회 값의 첫 번째 레코드의 4번째 컬럼은 table 생성 쿼리.
cur.close() # 커서 닫기
conn.close() # 연결 종료
'basic > 데이터베이스' 카테고리의 다른 글
[RDB] Foreign Key 사용 여부 판단 (0) | 2022.06.19 |
---|