[Python] 7.sqlite3 DB 연동 CRUD 구현
#정리
#20sqlite3 - 로컬 db#import sqlite3 : sqlite3 임포트 (아래 2가지 사전 설치 필요)
- sudo apt install libsqlite3-dev
- sudo apt install sqlite3
#1.connect : "파일명.db"에 커넥션을 맺겠다.** 쿼리 통신이 끝나면 마지막에 con.close 를 해준다.
- con = sqlite3.connect("py20test.db")#2. cursor init : pstmt 초기화
- cs = con.cursor()#3. create table : 쿼리문 작성 - 뎁스 상관없음
- cs.execute(''' ~ ''')
#동적 쿼리문 작성<1. 단일 결과>
- values = ("park",44,1) #tuple
- cs.execute(''' ~ ? 표시로 동적 처리 ~ ''', values)
- con.commit( ) #값 commit- con.close #커넥션 종료
<2. 복수 결과>** css값은(cursor object)는 값이 일회성이라, 두번째 호출 시에는 데이터가 없다 **
**select * from test where num>=? and num<=? >> 특정 범위를 뽑아낼 수도 있다.**searchList에서 검색키워드를 가공하여 보내준다. searchWord = "%"+searchWord+"%"
- values = (3,) #**tuple로 해줘야 하기 때문에 ,까지 적어줘야한다.**
**css : cs의 결과가 여러개
- css = - cs.execute(''' ~ ? 표시로 동적 처리 ~ ''', values)
- con.commit()
- for row in css:
>> print(row) #결과값 나열(출력)- con.close #커넥션 종료
#20sqlite3 - 로컬 db
#import sqlite3 : sqlite3 임포트 (아래 2가지 사전 설치 필요)
- sudo apt install libsqlite3-dev
- sudo apt install sqlite3
#1.connect : "파일명.db"에 커넥션을 맺겠다.
** 쿼리 통신이 끝나면 마지막에 con.close 를 해준다.
- con = sqlite3.connect("py20test.db")
#2. cursor init : pstmt 초기화
- cs = con.cursor()
#3. create table : 쿼리문 작성 - 뎁스 상관없음
- cs.execute(''' ~ ''')
#동적 쿼리문 작성
<1. 단일 결과>
- values = ("park",44,1) #tuple
- cs.execute(''' ~ ? 표시로 동적 처리 ~ ''', values)
- con.commit( ) #값 commit
- con.close #커넥션 종료
<2. 복수 결과>
** css값은(cursor object)는 값이 일회성이라, 두번째 호출 시에는 데이터가 없다 **
**select * from test where num>=? and num<=? >> 특정 범위를 뽑아낼 수도 있다.
**searchList에서 검색키워드를 가공하여 보내준다. searchWord = "%"+searchWord+"%"
- values = (3,) #**tuple로 해줘야 하기 때문에 ,까지 적어줘야한다.**
**css : cs의 결과가 여러개
- css = - cs.execute(''' ~ ? 표시로 동적 처리 ~ ''', values)
- con.commit()
- for row in css:
>> print(row) #결과값 나열(출력)
- con.close #커넥션 종료
--예문 코드 보기--
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#sudo apt install libsqlite3-dev
#sudo apt install sqlite3
import sqlite3
print("---------------")
#1.connect : "파일명.db"에 커넥션을 맺겠다.
con = sqlite3.connect("py20test.db")
#ls 로 db생성 확인 가능
print("1.connection successed..")
#2. cursor init : pstmt 초기화
cs = con.cursor()
print("2.cursor init successed..")
#3. create table : 쿼리문 작성 - 뎁스 상관없음
cs.execute('''
create table if not exists test (
num integer primary key autoincrement,
name text,
age integer
)''')
#sqlite py20test.db ".tables" >> test확인 가능
print("3.create table successed..")
#동적 쿼리문 작성
#insert
'''
for i in range(10):
values = ("lee"+str(i),33+i) #tuple
cs.execute(\'''
insert into test(name,age) values(?,?)
\''', values)
con.commit()
print("4.insert successed..")
#sqlite3 py20test.db "select * from test"
print("---------------")
'''
#update
values = ("park",44,1) #tuple
cs.execute('''
update test set name=?,age=? where num=?
''', values)
con.commit()
print("5.update successed..")
#sqlite3 py20test.db "select * from test"
print("---------------")
#delete
values = (2,) #**tuple로 해줘야 하기 때문에 ,까지 적어줘야한다.**
cs.execute('''
delete from test where num=?
''', values)
con.commit()
print("6.delete successed..")
#sqlite3 py20test.db "select * from test"
print("---------------")
#selectOne
#select * from test where num>=? and num<=? >> 특정 범위를 뽑아낼 수도 있다.
values = (3,) #**tuple로 해줘야 하기 때문에 ,까지 적어줘야한다.**
#css : cs의 결과가 여러개
css = cs.execute('''
select * from test where num=?
''', values)
#print(css) #object 결과물 확인
for row in css:
print(row)
print("7.selectOne successed..")
#sqlite3 py20test.db "select * from test"
print("---------------")
#selectAll
#css : cs의 결과가 여러개
css = cs.execute('''
select * from test order by num desc
''')
#print(css)
for row in css:
print(row)
print("8.selectAll successed..")
#sqlite3 py20test.db "select * from test"
print("---------------")
#searchList
#searchKey = "name"
#searchWord = "ki"
searchKey = "age"
searchWord = "3"
searchWord = "%"+searchWord+"%"
values = (searchWord,) #**tuple로 해줘야 하기 때문에 ,까지 적어줘야한다.**
#css : cs의 결과가 여러개
if searchKey == "name":
css = cs.execute('''
select * from test where name like ?
''', values)
if searchKey == "age":
css = cs.execute('''
select * from test where age like ?
''', values)
print(css) #object 결과물 확인
for row in css:
print(row)
print("9.searchList successed..")
#sqlite3 py20test.db "select * from test"
print("---------------")
#select count==0 >> dummy data insert
#** css 는 두번째 호출 시에는 데이터가 없다 **
#selectAll
css = cs.execute('''
select count(*) from test order by num desc
''')
for row in css:
print(row,row[0])
cnt=row[0]
print("10.count(*) cnt successed...")
print("cnt:",cnt)
print("---------------")
if cnt == 0 :
for i in range(10):
values = ("lee"+str(i),33+i) #tuple
cs.execute('''
insert into test(name,age) values(?,?)
''', values)
con.commit()
print("dummy insert successed..")
print("---------------")
#커넥션 종료
con.close()
------------------------
#mission : member DB + Fn()
- 회원의 id/pw/name/tel 의 정보를 CRUD 할 수 있도록 DB를 연동하여 작성하시오.
- 해당 내용을 함수화 하시오.
--예문 코드 보기--
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sqlite3
print("---------------")
#db_name = py21member.db
#table_name = member(num,id,pw,name,tel)
#db connection
con = sqlite3.connect("py21member.db")
cs = con.cursor()
#db table create
def table_create():
cs.execute('''
create table if not exists member (
num integer primary key autoincrement,
id text,
pw text,
name text,
tel text)
''')
print("create table successed..")
#dummydata
def dummydata():
css = cs.execute('''
select count(*) cnt from member
''')
for row_num in css:
cnt=row_num[0]
print("cnt:",cnt)
if cnt == 0:
for i in range(5):
values = ("admin"+str(i),"hi123"+str(i),"kim"+str(i),"01"+str(i))
cs.execute('''
insert into member (id,pw,name,tel) values(?,?,?,?)
''',values)
for i in range(5):
values = ("admin"+str(i),"hi123"+str(i),"lee"+str(i),"01"+str(i))
cs.execute('''
insert into member (id,pw,name,tel) values(?,?,?,?)
''',values)
print("dummydata inserted..")
else :
print("datas already exist..")
con.commit()
#insert
def insert(user_id,user_pw,user_name,user_tel):
print("insert: {},{},{},{}".format(user_id,user_pw,user_name,user_tel))
for i in range(5):
values = (user_id+str(i),user_pw+str(i),user_name+str(i),user_tel+str(i))
cs.execute('''
insert into member (id,pw,name,tel) values(?,?,?,?)
''',values)
con.commit()
print("insert successed..")
#update
def update(num,user_id,user_pw,user_name,user_tel):
print("update: {},{},{},{},{}".format(num,user_id,user_pw,user_name,user_tel))
values = (user_id,user_pw,user_name,user_tel,num)
cs.execute('''
update member set id=?, pw=?, name=?, tel=? where num=?
''',values)
con.commit()
print("update successed..")
#delete
def delete(num):
print("delete: {}".format(num))
values = (num,)
cs.execute('''
delete from member where num=?
''',values)
con.commit()
print("delete successed..")
#selectOne
def selectOne(num):
print("selectOne: {}".format(num))
values = (num,)
css = cs.execute('''
select * from member where num=?
''',values)
#print(list(css))
for item in css:
print(item)
print("selectOne successed..")
#selectAll
def selectAll():
css = cs.execute('''
select * from member order by num desc
''')
for item in css:
print(item)
print("selectAll successed..")
#searchList
def searchList(searchKey,searchWord):
print("searchList: {},{}".format(searchKey,searchWord))
searchWord = "%"+searchWord+"%"
values = (searchWord,)
if searchKey == "id":
css = cs.execute('''
select * from member where id like ?
''',values)
if searchKey == "name":
css = cs.execute('''
select * from member where name like ?
''',values)
for item in css:
print(item)
print("searchList successed..")
print("---------------")
table_create()
dummydata()
insert("insertID","insertPW","insertName","00000")
update(3,"admin99","hi999","park","119")
delete(5)
selectOne(7)
selectAll()
searchList("name","in")
con.close()
print("con closed..")
print("---------------")