티스토리 뷰
1. 데이터 베이스를 사용하는 파이썬 코드 작성 연습을 하였다.
작성한 파이썬 코드를 주석과 함께 설명해보려고 한다.
여러 과목의 수강생과 강사의 데이터가 저장된 json파일을 읽어서 DB에 저장하는 프로그램이다.
import json #json 모듈을 import
import sqlite3 #sqlite3 모듈을 import
conn = sqlite3.connect("rosterdb.sqlite") #DB에 대한 연결 생성
cur = conn.cursor() #DB와 데이터를 주고 받기 위해 커서를 생성
cur.executescript(""" # executescript함수는 여러 줄의 쿼리 명령을 내릴 수 있는 함수이다.
DROP TABLE IF EXISTS User;
DROP TABLE IF EXISTS Member;
DROP TABLE IF EXISTS Course; # 각 테이블이 이미 존재할 경우 삭제
CREATE TABLE User(
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, # 기본키이다.
name TEXT UNIQUE # 맨뒤의 UNIQUE가 해당 필드가 논리 킴을 나타냄
);
CREATE TABLE Course(
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
title TEXT UNIQUE
);
CREATE TABLE Member(
user_id INTEGER, # 외래키이다.
course_id INTEGER,
role INTEGER,
PRIMARY KEY (user_id, course_id)
) # 각 테이블을 생성하는 코드
""")
fname = input("Enter file name: ")
if len(fname) < 1:
fname="roster_data_sample.json" # 아무것도 입력하지않을 경우 roset_data_sample.json 이 읽을 파일이름이 된다.
str_data = open(fname).read() # read() 메소드를 통해 파일을 한꺼번에 읽고
json_data = json.loads(str_data) # json으로 파싱한다.
for entry in json_data: # 한번에 읽어들인 json_data는 jsonArray이고 각 element가 jsonArray로 구성되어 있다.
name = entry[0]
title = entry[1]
role = int(entry[2])
print((name,title,role)) # 콘솔에 사람이름, 과목명, 역할(수강생 or 강사) 를 출력
cur.execute("""INSERT OR IGNORE INTO User(name)
VALUES (?)""", (name, ))
cur.execute("SELECT id FROM User WHERE name= ? ",(name, ))
user_id = cur.fetchone()[0]
cur.execute("""INSERT OR IGNORE INTO Course (title)
VALUES (?)""", (title,))
cur.execute("SELECT id FROM Course WHERE title = ? ",(title,))
course_id = cur.fetchone()[0]
cur.execute("""INSERT OR REPLACE INTO Member
(user_id, course_id, role) VALUES(?,?,?)""", (user_id,course_id,role)) #각 테이블에 INSERT하는 코드
conn.commit() # DB에 변경된 내용 저장
conn.close() # DB를 닫는다.
2. 인강을들으면서 파이썬 코드 작성연습을 하다보니, 예상보다 오랜시간이 걸려 시스템해킹공부는 못하였다.
'모각코' 카테고리의 다른 글
(8.8) 모각코 결과 (0) | 2018.08.08 |
---|---|
(8.6) 모각코 결과 (0) | 2018.08.06 |
(8.1) 모각코 목표 (0) | 2018.08.01 |
(7.30)모각코 목표 (0) | 2018.07.30 |
(7.20)모각코 결과 (0) | 2018.07.20 |