SQLite 연동, 테이블 생성, 데이터 삽입

2020. 4. 20. 16:27python

테이블 생성, 데이터 삽입

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()