DB의 작성

우선 가장 기본적인 SQLite DB의 작성을 해보겠습니다.

# -*- coding: utf-8 -*-
import sqlite3

di = {
    'member' : 
        [
            {'name':'정재우','age':27,'address':'서울시 송파구 오금로61길',
            'job':'대학생','hobby':['운동','뉴스보기','게임'],
            'goal':'보다 나은 세상',
            'like':{
                'food':['삼겹살','치킨','회','장어'],
                'device':['컴퓨터','스마트폰','에어컨'],
                'nation':['대한민국','중국','동남아시아']
            }},
            {'name':'박지숙','age':'44','address':'서울시 용산구 새창로 도원래미안',
            'job':'프리랜서강사','hobby':['리폼','고양이쳐다보기','책읽기','교안만들기'],
            'goal':'딸 대학보내기',
            'like':{
                'food':['잔치국수','삼겹삽','자몽','팥빙수','치킨'],
                'device':['노트북','건조기','블루투스 스피커'],
                'nation':['대한민국','베트남','스위스']
            }},
            {'name':'이정은', 'age':0, 'address':'서울시 광진구 능동 143',
            'job':'편집자', 'hobby':['연기', '노래', '영화', '책', '여행'],
            'goal':'나와 내 이웃이 행복하게 사는 것',
            'like':{
                'food':['치킨','엄마표 고추장찌개', '연어', '체리', '포도'],
                'device':['아이폰', '노트북', '에어팟'],
                'nation':['대한민국', '독일', '캐나다']
            }},
            {'name':'이영은','age':26,'address':'인천',
            'job':'회사원','goal':'찾는중?', 'hobby':['여행','독서','사진'],
            'like':{
                'food':['떡볶이','빵','치킨'],
                'device':['노트북','카메라','핸드폰'],
                'nation':['한국','미국','대만']
            }},
            {'name':'정수철', 'age':0, 'address':'서울시 노원구',
            'job':'회사원', 'hobby':['야구', '수영', '대화'],
            'goal':'스포츠타운',
            'like':{
                'food':['냉면', '참치', '장어', '고기'],
                'device':['자동차','거꾸리','자이글'],
                'nation':['대한민국','뉴질랜드','우즈벡']
            }},
            {'name':'황용훈', 'age':38, 'address':'서울시',
            'job':'디자이너','hobby':['골프','독서','미술'],
            'goal':'자유',
            'like':{
                'food':['한식','중식','일식','양식','분식'],
                'device':['맥','피씨','모바일'],
                'nation':['한국','중국','미국']
            }},
            {'name':'류혜림', 'age':30, 'address':'경기도 파주시 번영로55', 
            'hobby':['netflix','영화보기','산책'],
            'goal':'하고 싶은거 하기',
            'like':{
                'food':['회','초밥','해산물','제철음식','갈비','삼겹살','냉면'],
                'program':['포토샵','일러스트','인디자인'],
                'nation':['한국','캐나다','코스타리카','터키','멕시코']
            }},
            {'name': '조영민', 'age':37, 'address':'서울 노원구 노원로 186-15', 
            'job':'faculty', 'hobby':['요리', '기타'], 'goal':'농부', 
            'like': {
                'food':['국수', '통닭', '초밥', '피자'],
                'device':['Toyota Car', 'Mobile Phone'],
                'nation': ['미국','독일','일본','프랑스']
            }},
            {'name':'이재권','age':26,'address':'경기도 의정부시 흥선로 98-1',
            'job':'예비창업자','hobby':['영화감상','젬베','음악감상','오토바이'],
            'goal':'신속배달만 고려하는 이륜차 시장을 넘어 안전을 고려하는 이륜차 시장을 만드는 것',
            'like':{
                'food':['닭','인도커리','양고기','소고기','회','배','포도','꿔바로우'],
                'device':['오토바이','스마트폰','카메라'],
                'nation':['대한민국','미국','북한','일본','중국','몽골','러시아']
            }},
            {'name':'홍성준', 'age':27, 'address':'경기도 광명시 하안동 하안주공 1008동',
            'job':'대학생', 'hobby':['사진촬영','비디오게임'],
            'goal':'데이터 분석 및 시각화',
            'like':{
                'food':['김치찌개', '삼겹살', '꽃등심'],
                'device':['컴퓨터','플레이스테이션','카메라'],
                'nation':['대한민국','일본','미국']
            }},
            {'name': '김대성', 'age':28, 'address':'서울시 관악로 12길 ',
            'join':'엔지니어', 'hobby': ['야구', '재즈공연', '게임'],
            'goal':'무료 기술 학교',
            'like':{
                'food':['참치찌게', '된장찌개', '치킨', '라면', '삼겹살'],
                'device': ['컴퓨터', '에어프라이', '오토바이'],
                'nation':['대한민국', '네덜란드','영국'] 
            }},
            {'name':'이진주', 'age':0, 'address':'경기도 평택시', 
            'job':0, 'hobby': ['자전거 타기', '여행', '러닝', '풍선아트'], 'goal':'노마드 개발자', 
            'like':{
                'food':['김치찌개', '삼겹살', '마라탕', '호떡'],
                'device':['노트북', '인덕션', '와인따개'],
                'nation':['대한민국','덴마크','필리핀','중국']
            }},
            {'name':'황희진', 'age':'25', 'address':'인천광역시 계양구', 'job':'직장인', 
            'hobby':['고양이랑놀기', '웹서핑', '맛집탐방'],
            'goal':'코딩하는마케터',
            'like':{
                'food':['카레','만두','빵'],
                'device':['에어프라이어','이북리더기','미니빔프로젝터'],
                'nation':['중국','베트남','스웨덴']
            }},
            {'name': '정재윤', 'age':0, 'address':'서울시 마포구',
            'job':'프리랜서','hobby':['축구','파이썬','코딩'],
            'goal' : '투자가',
            'like':{
                'food':['떡볶이','삼겹살','스테이크','쌀국수'],
                'device':['자전거', '킥보드', '드론'],
                'nation':['대한민국','중국','싱가폴']
            }},
            {'name':'김마야','age':29,'address':'서울시 마포구 서교동', 
            'job':'사업기획자', 'hobby': ['복싱','수제맥주품평','중드/영드감상'],
            'goal':'디지털 노마드',
            'like':{
                'food':['곱창구이','막창구이','곱창전골','훠궈','양꼬치','떡볶이'],
                'device':['mac book','iphone','미니빔'],
                'nation':['대한민국','네덜란드','중국','호주']
            }},
            {'name':'김현석', 'age':00, 'address':'경기도 광명시','job': '자영업', 
            'hobby':'자전거', 'goal': '건물주',
            'like': {
                'food' : ['삼겹살', '김치찌개','곱창'],
                'device' : ['자전거', '커피머신', '스마트폰'],
                'nation' : ['몰디브', '대한민국', '스위스']
            }},
            {'name':'박미지','age': 30, 'address':'서울시 관악구 신림동',
            'job':'없음', 'hobby':['게임', '독서', '영화감상'], 'goal' : '취업', 
            'like': { 
                'food':['회', '치킨', '국수','삼겹살'], 
                'device':['iphone','컴퓨터','ps4pro'],
                'nation':['대한민국','캐나다','영국']
            }},
            {'name':'정명석','age':26,'address':'서울 용산구',
            'job':'student','hobby':['영화보기','중국어 공부'],'goal':'창업',
            'like':{
                'food':['삼겹살','스시'],
                'device':['컴퓨터','폰'],
                'nation':['대한민국','중국']}}
        ],
    'advisor' : [
         {'name':'김민철', 'age':38, 'address':'서울시 구로구 구로동 1129번지',
        'job':'개발자', 'hobby':['기타', '피아노', '게임'], 
        'goal':'무료 기술 학교',
        'like': {
            'food':['참치찌게', '된장찌게', '치킨', '라면', '삼겹살'],
            'device':['컴퓨터', '에어프라이', '오토바이'],
            'nation':['대한민국','네델란드','영국']
        }},
        {'name':'최원미', 'age':21, 'address':'서울시 강북구',
        'job':'학생', 'hobby':['요가', '웹툰', '영화'], 
        'goal':'부자 되기',
        'like': {
            'food':['오므라이스', '치킨', '새우', '삼겹살'],
            'device':['imac', '전동휠','스마트폰'],
            'nation':['대한민국','중국','프랑스','스위스','LA']
        }}
    ]  
}

memberDB = "members.db"

def ConnectMemberDB():
    try:
        conn = sqlite3.connect(memberDB)
        cs = conn.cursor()
        sql = """CREATE TABLE IF NOT EXISTS members 
        (id INTEGER primary key autoincrement, name TEXT, age INTEGER, address TEXT, 
        job TEXT
        )"""
        cs.execute(sql)

        conn = sqlite3.connect(memberDB)
        sql = """CREATE TABLE IF NOT EXISTS hobby 
        (member_id INTEGER, hobby TEXT)"""
        cs.execute(sql)
        
        conn = sqlite3.connect(memberDB)
        sql = """CREATE TABLE IF NOT EXISTS like_food 
        (member_id INTEGER, food TEXT)"""
        cs.execute(sql)

        conn = sqlite3.connect(memberDB)
        sql = """CREATE TABLE IF NOT EXISTS like_device 
        (member_id INTEGER, device TEXT)"""
        cs.execute(sql)

        conn = sqlite3.connect(memberDB)
        sql = """CREATE TABLE IF NOT EXISTS like_nation 
        (member_id INTEGER, nation TEXT)"""
        cs.execute(sql)
        #conn.commit()
        return conn

        return conn
    except Exception as err:
        print("Exception in lottoDBconnect", err)
        return -1


def InsertMemberDB(conn, indv):
    try:
        sql = "INSERT INTO members (name, age, address, job) VALUES(?,?,?,?)"
        conn.execute(sql, (indv.get('name'), indv.get('age'), indv.get('address'), indv.get('job')))
        conn.commit()

        sql = "SELECT id from members WHERE name =\'" +indv.get('name')+"\' AND age = " +str(indv.get('age')) + " AND address = \'"+ indv.get('address')+"\' AND job = \'"+ indv.get('job')+"\'"
        cs = conn.cursor()
        cs.execute(sql)
        getret = cs.fetchall()
        
        sql = "INSERT INTO hobby (member_id, hobby) VALUES(?, ?) "
        for hobbyvalue in indv.get('hobby'):
            conn.execute(sql, (getret[0][0], hobbyvalue))
            conn.commit()

        sql = "INSERT INTO like_food (member_id, food) VALUES(?, ?)"
        for foodvalue in indv.get('like').get('food'):
            conn.execute(sql, (getret[0][0], foodvalue))
            conn.commit()

        sql = "INSERT INTO like_device (member_id, device) VALUES(?, ?)"
        for devicevalue in indv.get('like').get('device'):
            conn.execute(sql, (getret[0][0], devicevalue))
            conn.commit()
        
        sql = "INSERT INTO like_nation (member_id, nation) VALUES(?, ?)"
        for nationvalue in indv.get('like').get('nation'):
            conn.execute(sql, (getret[0][0], nationvalue))
            conn.commit()
        
    except Exception as err:
        print("Exception rise in InsertMemberDB", err)

con = ConnectMemberDB()
for indv in di.get('member'):
    InsertMemberDB(con, indv)

예제는 기존에 여러번 작업해 보았던 Dictionary를 SQLite Database화하는 작업입니다.

Last updated