파이썬 내장 sqlite를 이용해서 DB를 만들어보았다.

방법
1. 커넥션 객체 만들기.
2. 데이터를 읽고 쓰는 커서 만들기.
3. 커서에서 실행된 쿼리는 커밋으로 DB에 저장하기.

csv로 구성된 대용량 데이터를 집어 넣는 것도 해보았고 JSON 형태의 파일로 들어가는 것을 확인했다.




================================ Python ================================

import sqlite3

import csv


print(sqlite3.version)  # 라이브러리 버전

print(sqlite3.sqlite_version)  # sqlite 버전


# 커넥션 객체 생성

con = sqlite3.connect('db.sqlite')

# 커서 생성

cur = con.cursor()

# 테이블을 작성한다.

# execute 메서드를 가지고 실행, commit 메서드를 통해서 데잉터를 물리적 공간에 저장을 시킨다.

cur.execute(

    """

    create table hanbit_books(

        title varchar(100),

        author varchar(100),

        translator varchar(100),

        pub_date date,

        isbn varchar(100)

    )

    """

)

# 명시적 효과

# con.commit()


# ? 와일드 카드 사용하는 방법

# 데이터베이스에서 데이터가 저장이 되면 기본적으로 리스트 형태의 튜플값으로 저장이 된다.

query_str = cur.execute(

    'insert into hanbit_books values(?, ?, ?, ?, ?)',

    ('책 이름', '저자 이름', '번역자 이름', '2018-06-14', '999111')

)

# 커밋을하여 데이터를 넣는다.

con.commit()


# 데이터를 불러온다.

# 파이썬은 오라클을 비롯해서 모든 데이터 베이스에서 사용하는 쿼리문을 지원한다.


# 쿼리를 cursor에 입력한다.

cur.execute('select * from hanbit_books')

# 데이터를 하나 출력한다. .fetchone()     전체 출력은 .fetchall()

print(cur.fetchone())

# 컬럼명 출력. 요약

print(cur.description)


# 제이슨 데이터 구조를 이용하여 테이블에 데이터 넣기

# :(네임스페이스)로 아래 매개변수가 들어갈 위치를 지정한다.

query_str = 'insert into hanbit_books values(:title, :title, :title, :pub_date, :isbn)'

params ={

    "title": "책이름1",

    "pub_date": "2018-07-14",

    "isbn": 888111

}

# 쿼리와 매개변수를 지정한다.

cur.execute(query_str, params)

con.commit()


# 데이터가 들어간 것을 확인

print(cur.fetchall())


# 직접 집어넣고 commit()을 한 후에 전부 출력해본다.

cur.execute("insert into hanbit_books values('데이터 분석', '심내', '...', '20180614', '333333333')")

con.commit()

cur.execute('select * from hanbit_books')

print(cur.fetchall())


# 여러 개의 데이터를 삽입할 때는 executemany 메서드를 이용한다.

csv_file = open('book_list.csv', encoding='utf-8')

csv_reader = csv.reader(csv_file)

# 데이터를 읽어보기.

for read in csv_reader:

    print(read)

# 리스트 구조이므로 리스트 형태로 변환

book_list = list(csv_reader)

# head는 필요없으므로 제거한다.

book_list = book_list[1:]

# strop 메서드를 이용해서 공백을 제거한다.

for item in book_list:

    item[1] = item[1].strip()

    item[2] = item[2].strip()

# print(book_list)  # 제대로 되었는지 확인

# book_list 데이터를 다 넣는다.

cur.executemany('insert into hanbit_books values(?, ?, ?, ?, ?)', book_list)

# 커밋

con.commit()


# 데이터를 검색. 꼭 ?를 쓸 필요는 없고 그냥 직접 적어도 상관없다.

cur.execute('select * from hanbit_books where author = ? ', ('유태선',))

print(cur.fetchall())

query_str = 'select * from hanbit_books where author = :name'

params = {

    "name": "유태선"

}

# 커서에 담기

cur.execute(query_str, params)

# 원하는 갯수만큼 출력

print(cur.fetchmany(size = 10))


# 데이터 수정

query_str = 'update hanbit_books set author = :name where lsbn = :lsbn'

params = {

    "name": '배고파',

    "lsbn": '333333333'

}

# 수정 쿼리문 실행

cur.execute(query_str, params)

con.commit()

# 제대로 바뀌었는지 확인

cur.execute('select * from hanbit_books where name = ?', ('배고파',))

print(cur.fetchall())


# 데이터 삭제

cur.execute('delete from hanbit_books where author = ?', ('배고파',))

# 커밋

con.commit()

# 없어진 것을 확인

cur.execute('select * from hanbit_books where author = ?'('배고파',))

print(cur.fetchall())






import sqlite3

import sys

'''

먼저,

world.sql을 폴더에 넣고

Edit Configurations -> Parameters -> world.sql 입력

을 해주고 아래를 실행한다.

'''

script_path = sys.argv[1]


if len(sys.argv) == 3:

    db = sys.argv[2]

else:

    # 메모리에서 데이터베이스 생성

    db = ":memory:"


try:

    con = sqlite3.connect(db)

    with con:

        cur = con.cursor()

        with open(script_path, 'rb') as f:

            # 한글 인코딩은 UTF-8, cp037, cp437 중에 하나를 선택하면 된다.

            cur.executescript(f.read().decode('cp437'))

except sqlite3.Error as err:

    print('오류 발생: %s' % err)



================================ Python ================================

+ Recent posts