티스토리 뷰

모각코

(8.1)모각코 결과

khe0616 2018. 8. 1. 21:28


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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함