Python

[Python] 7.sqlite3 DB 연동 CRUD 구현

걍작 2022. 4. 7. 22:55

#정리


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