SQLite 연동, 테이블 생성, 데이터 삽입
2020. 4. 20. 16:27ㆍpython
테이블 생성, 데이터 삽입
import sqlite3
import datetime
#삽입 날짜 생성
now= datetime.datetime.now() #현재 날짜와 시각을 표시
print('now: ', now)
nowDatetime = now.strftime('%Y-%m-%d %H: %M:%s')
pinrt(nowDatetime)
#sqlite3
print('sqlite3.version : ', sqlite3.version)
print('sqlite3.sqlite_version : ', sqlite3.sqlite_version)//sqlite의 버전을 알려줌.
# DB 생성 & Auto Commit(Rollback)-> 영구적으로 저장(이전으로 되돌리기)
conn = sqlite3.connect('c:/python_basic/resource/database.db', isolation_level=NONE)//autocommit
#Cursor 커서가 끝이면 NULL 이 나옴 EOF같은 느낌
c = conn.cursor()
print('Cursor type: ', type(c))
#table 생성(Data Type: TEXT, NUMERIC INTERGER REAL BLOB)
c.execute("CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY, USERNMAE TEXT
EMAIL TEXT, \ phone text, website text, regdate text) ")
-> 데이터베이스의 테이블에 id, username, email, phone, website, regdate가 생성됨.
#데이터 삽입
c.execute("INSERT INTO USERS VALUES(1, 'kim', 'KIMNAVER.COM', '010-1234-5678', 'KIM.com', ?), (nowDatetime,) ")
-정석법
c.execute("INSERT INTO USERS VALUES(id, username, email, phone, website, regdate) VALUES (?,?,?,?,?,?,)"
/(2, 'park', 'park@naver.com', '010-232-23', 'park.com', nowDatetime))
#Many 삽입(튜플, 리스트)(많은 데이터를 한번에 불러오기)
userList = (
(3, 'Lee', 'Lee@naver.com', '010-2222-2222', 'Lee.com', nowDatetime),
(4, 'Cho', 'Cho@naver.com', '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()
#롤백
conn.rollback()
#접속 해제// fclose()와 같은 늬앙스
conn.close()
테이블 조회, 조건 조회(selete, where, tuple, dictionary, mapping)
import sqlite3
conn = sqlite3.connect('c://')
#커서 바인딩
c = conn.cursor()
#데이터 조회(전체)
c.execute("SELECT * FROM users")
#커서 위치가 변경
#1개 로우 선택
print('One -> \n', c.fetchone())
#지정 로우 선택
print("Three -> n\", c.fetchmany(size=3))
>현재 커서는 5
#전체 로우 선택
print('All -> \n,' c.fetchall())
>5번 리스트만 나옴.
print('All -> \n,' c.fetchall())
->빈 리스트만 출력
#순회1
rows = c.fetchall()
for row in rows:
print('retrieve1 > ', 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
param1 = 4
c.execute('SELECT * FROM users WHERE id="%s', %param2)
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())
>3번 5번 리스트 출력
# WHERE Retrieve5
c.execute("SELECT * FROM users WHERE id IN('%ㅇ', '%d' )" %(3,4))# 튜플 형식
print('param5', c.fetchall())
>3번 5번 리스트 출력
# WHERE Retrieve6
c.execute("SELECT * FROM users WHERE id=:id1 OR id=:id2", {"id1":2, "id2": 5})# 딕셔너리 형식
print('param6', c.fetchall())
#Dump 출력 >데이터 베이스 출력
with conn:>> 위에서 선언한 conn >데이터 베이스랑 연결
with open('c:/p/resource/dump.sql', 'w') as f:
for line in conn.iterdump():
f.write('%s.\n' % line)
print('Dump Print Complete')
> dump.sql파일에 백업됨.
#f.close(), conn.close() 가 자동으로 실행됨 with에 의해서
테이블 수정, 삭제
import sqlite3
# DB생성(파일)
conn = sqlite3.connect('본인이 원하는 경로/database.db/database.db')
# Cursor연결
c = conn.cursor()
# 데이터 수정1
c.execute("UPDATE users SET username = ? WHERE id = ?", ('niceman', 1))
# 데이터 수정2
c.execute("UPDATE users SET username = :name WHERE id = :id", {"name": 'niceman', 'id': 3})
# 데이터 수정3
c.execute("UPDATE users SET username = '%s' WHERE id = '%s'" % ('badboy', 5))
# 중간 데이터 확인1
for user in c.execute('SELECT * FROM users'):
print(user)
# Row Delete1 데이터 삭제
c.execute("DELETE FROM users WHERE id = ?", (7,))
# Row Delete2
c.execute("DELETE FROM users WHERE id = :id", {'id': 8})
# Row Delete3
c.execute("DELETE FROM users WHERE id = '%s'" % 9)
# 중간 데이터 확인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()
'python' 카테고리의 다른 글
프로젝트 - 타이핑 게임 제작 (0) | 2020.04.25 |
---|---|
python 외부 파일 처리 - Excel, CSV 읽기 쓰기 (0) | 2020.04.18 |
python 기초 - 예외 처리 (0) | 2020.04.18 |
python 기초 - 파일 읽기, 파일쓰기 (0) | 2020.04.18 |
python 기초 - 모듈, 패키지 (0) | 2020.04.18 |