본문 바로가기
Algorithm/자료구조, 알고리즘

[코딩 + 알고리즘 완주반] 9일차. 데이터베이스 연동 (SQLite)

by newnu 2021. 3. 23.
반응형

# 데이터베이스 및 테이블 생성

# 테이블 생성 및 삽입

import sqlite3
import datetime

#삽입 날짜 생성
now = datetime.datetime.now()
print(now)

# 날짜를 스트링으로 변환
nowDatetime = now.strftime('%Y-%m-%d %H:%M:%S')
print(nowDatetime)

#sqlite3
print(sqlite3.version)
print(sqlite3.sqlite_version)

# DB 생성 & Auto commit(Rollback)
conn = sqlite3.connect('./resource/database.db',isolation_level=None)

# cursor
c = conn.cursor()
print('Cursor Type : ',type(c))

# 테이블 생성(Datatype :  TEXT, NUMERIC, INTEGER, REAL, BLOB)
c.execute("Create Table if not exists users(id INTEGER PRIMARY KEY, username text, email text, phone text, website text,regdate text)")

# 데이터 삽입
#c.execute("INSERT INTO users VALUES(1,'Kim', 'Kim@naver.com','010-0000-0000','Kim.com',?)",(nowDatetime,))
#c.execute("INSERT INTO users(id,username,email,phone,website,regdate) VALUES ( ?,?,?,?,?,?)",(2,'Park','Park@daum.net','010-1111-1111','Park.com',nowDatetime))

# Many 삽입(튜플, 리스트) # 한번에 많은 데이터 삽입
userList = (
    (3,'Lee','Lee@naver.com','010-2222-2222','Lee.com',nowDatetime),
    (4,'Cho','Cho@daum.net','010-3333-3333','Cho.com',nowDatetime),
    (5,'Yoo','Yoo@naver.com','010-4444-4444','Yoo.com',nowDatetime)
)

#c.executemany("INSERT INTO users(id,username,email,phone,website,regdate) Values(?,?,?,?,?,?)",userList)

# 테이블데이터 삭제
#conn.execute("DELETE FROM users")
#print("users db deleted : ",conn.execute("DELETE FROM users").rowcount) # 몇개의 데이터 지워졌는지 확인

# 커밋 : isolation_level = None 일 경우 자동 반영(오토 커밋)
#conn.commit()

#rollback
#conn.rollback()

# 접속 해제
conn.close()

# 테이블 조회, 조건 조회

# 테이블 조회
import sqlite3

# DB 파일 조회(없으면 새로 생성)
conn = sqlite3.connect('./resource/database.db')

#커서 바인딩
c = conn.cursor()

# 데이터 조회(전체)
c.execute('SELECT * FROM users')

# 커서 위치가 변경
#1개 로우 선택
#print('One -> \n', c.fetchone())

# 지정 로우 선택
#print("Three -> \n", c.fetchmany(size=3))

# 전체 로우 선택
#print('All -> \n', c.fetchall())

print()

# 순회1
# rows = c.fetchall()
# for row in rows:
#     print('retrieve >',row)

# 순회2
# for row in c.fetchall():
#     print('retrieve2 > ',row)

# 순회3
# for row in c.execute('SELECT * FROM users ORDER BY id desc'):
#     print('retrieve3 > ',row)

# WHERE Retrieve1
param1=(3,)
c.execute('SELECT * FROM users WHERE id=?',param1)
print('param1',c.fetchone())
print('param1',c.fetchall()) # 데이터 없음

# WHERE Retrieve2
param2=4
c.execute('SELECT * FROM users WHERE id="%s"'% param1)
print('param2',c.fetchone())
print('param2',c.fetchall()) # 데이터 없음

# WHERE Retrieve3
c.execute('SELECT * FROM users WHERE id=Id',{"Id" : 5})
print('param3',c.fetchone())
print('param3',c.fetchall()) # 데이터 없음

# WHERE Retrieve4
param4=(3,5)
c.execute('SELECT * FROM users WHERE id In (?,?)',param4)
print('param4',c.fetchall())

# WHERE Retrieve5
c.execute('SELECT * FROM users WHERE id In ("%d","%d")'% (3,4))
print('param5',c.fetchall())

# WHERE Retrieve5
c.execute('SELECT * FROM users WHERE id=:id1 OR id =:id2',{"id1":2,"id2":5})
print('param6',c.fetchall())

# Dump 출력
# Dump : 데이터베이스에 저장된 테이블 등의 정보를 SQL문으로 출력
with conn:
    with open('./resource/dump.sql','w') as f:
        for line in conn.iterdump():
            f.write('%s\n' % line)
        print('Dump Print Complete')

# f.close(), conn.close()

# 테이블 데이터 수정, 삭제

# 테이블 데이터 수정 및 삭제

import sqlite3

# DB 생성(파일)
conn = sqlite3.connect('./resource/database.db')

# Cursor 연결
c = conn.cursor()

# 데이터 수정1
#c.execute('UPDATE users SET username = ? WHERE id = ?',('niceman',2))

# 데이터 수정2
#c.execute('UPDATE users SET username = :name WHERE id = :id',{'name':'goodman',"id" : 5})

# 데이터 수정3
#c.execute('UPDATE users SET username = "%s" WHERE id = "%s"' % ('badboy',3))

#중간 데이터 확인1
for user in c.execute("SELECT * from users"):
    print(user)

# Row Delete1
#c.execute("DELETE FROM users WHERE id =?",(2,))

# Row Delete2
#c.execute("DELETE FROM users WHERE id =:id",{"id":5})

# Row Delete3
c.execute("DELETE FROM users WHERE id ='%s'" % 4)

print()

#중간 데이터 확인2
for user in c.execute("SELECT * from users"):
    print(user)

# 테이블 전체 데이터 삭제
print("users db deleted : ", conn.execute("DELETE FROM users").rowcount,"rows")

# 커밋
conn.commit() # 커밋 해야 바뀜

# 접속 해제
conn.close()

반응형