20230322 KDT 학습일지
2023. 3. 22. 17:50ㆍ학습일지
728x90
1. My sqlclient
* 파이썬에는 My SQL서버와 통신할 수 있는 파이썬용 데이터베이스 커넥터의 종류가 여러가지 있음
* PyMySQL, mySQLclient를 가장 많이 사용함
* 사용법은 비슷하나 속도가 빠른 mysqlclient를 권장하고 있음
!pip install mysqlclient <mysqlclient를 연동시킨다>
import MySQLdb
#host: ip주소, localhost, 127.0.0.1
#user: 유저, root,
#password : 비밀번호, 1234
#db : 데이터베이스. kdt
db = MySQLdb.connect(host='localhost',user='root', password='1234',db='kdt')
#db = MySQLdb.connect('localhost','root', 1234','kdt')
2.cursor 생성하기
* 하나의 DataBase Connection에대하여 독립적으로 SQL문을 실행할 수 있는 작업환경을 제공하는 객체
* 하나의 connection에 동시에 한 개의 cursor만 생성할 수 있으며, cursor를 통해 SQL문을 실행하면 실행결과를 튜플 단위
로 반환
cur = db.cursor()
sql = 'select userid, username,hp, email,gender from member'
cur.execute(sql)
#cur.execute('select userid, username,hp, email,gender from member')
- 출력값 : 7
3. SQL문 결과 가져오기
* fetchall() : 한번에 모든 tuple을 가져옴. 검색 결과가 매우 크다면 메모리오버헤드가 발생할 수 있음
* fetchone() : 한번에 하나의 tuple을 가져옴. 다시 메서드를 호출하면 다음 데이터 하나를 가져옴
4. cursor와 connection 닫아주기
cur.close() #커서 닫기
db. closer() #커넥션 닫기
5. 데이터 삽입하기
sql= "insert into member (userid, userpw, username, hp, email, gender, ssn1, ssn2) values(%s,%s,%s,%s,%s,%s,%s,%s)"
data = ('avocado', '1234','아보카도','010-1111-1111', 'apple@apple', '여', '000000','0000000')
cur.execute(sql,data)
db.commit()
sql= "insert into member (userid, userpw, username, hp, email, gender, ssn1, ssn2) values(%s,%s,%s,%s,%s,%s,%s,%s)"
data =[('tomato', '1234','토마토','010-1111-1111', 'apple@apple', '여', '000000','0000000'),('mango', '1234','마앙고','010-1111-1111', 'mango@apple', '여', '000000','0000000'),('peach', '1234','피이치','010-1111-1111', 'peach@apple', '여', '000000','0000000')]
cur.executemany(sql,data)
db.commit()
#문제
#회원가입 프로그램을 만들어보자
import MySQLdb
db = MySQLdb.connect(host='localhost', user='root', password='1234', db='kdt')
cur = db.cursor()
while True:
try:
userid = input('아이디를 입력하세요:')
userpw = input('비밀번호를 입력하세요:')
username = input('이름을 입력하세요:')
hp = input('전화번호를 입력하세요:')
email = input('이메일을 입력하세요:')
gender = input('성별을 입력하세요:')
ssn1 = input('주민번호 앞자리를 입력하세요:')
ssn2 = input('주민번호 뒷자리를 입력하세요:')
zipcode = input('우편번호를 입력하세요:')
address1 = input('주소를 입력하세요:')
address2 = input('상세 주소를 입력하세요:')
address3 = input('추가사항을 입력하세요:')
sql = "insert into member (userid, userpw, username, hp, email, gender, ssn1, ssn2, zipcode, address1, address2, address3) values(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);"
data = (userid, userpw, username, hp, email, gender, ssn1, ssn2, zipcode, address1, address2, address3)
cur.execute(sql, data)
db.commit()
print('가입되었습니다')
break
except:
print('다시 입력하세요')
cur.close()
db.close()
6. 데이터 수정하기
7. 데이터 삭제하기
8. DB를 이용한 단어장 만들기
class Words:
def __init__(self, eng, kor, lev=1):
self.eng = eng
self.kor = kor
self.lev = lev
def setEng(self, eng):
self.eng = eng
def getEng(self):
return self.eng
def setKor(self, kor):
self.kor = kor
def getKor(self):
return self.kor
def setLev(self, lev):
self.lev = lev
def getLev(self):
return self.lev
import MySQLdb
class WordsDao:
def __init__(self):
self.db = None
def connect(self):
self.db = MySQLdb.connect('localhost', 'root', '1234', 'kdt')
def disconnect(self):
self.db.close()
def insert(self, word):
self.connect()
cur = self.db.cursor()
sql = "insert into words values (%s, %s, %s)"
data = (word.getEng(), word.getKor(), word.getLev())
cur.execute(sql, data)
self.db.commit()
self.disconnect()
def selectAll(self):
self.connect()
cur = self.db.cursor()
sql = 'select eng, kor, lev from words'
cur.execute(sql)
row = cur.fetchall()
self.disconnect()
return row
def search(self, eng):
self.connect()
cur = self.db.cursor()
sql = 'select eng, kor, lev from words where eng=%s'
data = (eng,)
cur.execute(sql, data)
row = cur.fetchone()
self.disconnect()
return row
def update(self, word):
self.connect()
cur = self.db.cursor()
sql = 'update words set kor=%s, lev=%s where eng=%s'
data = (word.getKor(), word.getLev(), word.getEng())
result = cur.execute(sql, data)
self.db.commit()
if result > 0:
print('수정되었습니다')
else:
print('해당 단어가 없습니다')
self.disconnect()
def delete(self, eng):
self.connect()
cur = self.db.cursor()
sql = 'delete from words where eng=%s'
data = (eng,)
result = cur.execute(sql, data)
self.db.commit()
if result > 0:
print('삭제되었습니다')
else:
print('해당 단어가 없습니다')
self.disconnect()
class WordsService:
def __init__(self):
self.dao = WordsDao()
def insertWord(self):
eng = input('단어를 입력하세요')
kor = input('뜻을 입력하세요')
lev = input('레벨을 입력하세요')
word = Words(eng, kor, lev)
self.dao.insert(word)
def printAll(self):
datas = self.dao.selectAll()
print(datas)
def searchWord(self):
eng = input('검색할 단어를 입력하세요')
word = self.dao.search(eng)
if word:
print(word)
else:
print('찾는 단어가 없습니다')
def editWord(self):
eng = input('수정할 단어를 입력하세요')
word = self.dao.search(eng)
if word == None:
print('수정할 단어를 찾지 못했습니다')
else:
kor = input('새로운 뜻을 입력하세요')
lev = input('새로운 레벨을 입력하세요')
word = Words(eng, kor, lev)
self.dao.update(word)
def delWord(self):
eng = input('삭제할 단어를 입력하세요')
self.dao.delete(eng)
class Menu:
def __init__(self):
self.service = WordsService()
def run(self):
while True:
try:
menu = int(input('1.등록하기 2.출력하기 3.검색하기 4.수정하기 5.삭제하기 6.종료하기'))
if menu == 1:
self.service.insertWord()
elif menu == 2:
self.service.printAll()
elif menu == 3:
self.service.searchWord()
elif menu == 4:
self.service.editWord()
elif menu == 5:
self.service.delWord()
elif menu == 6:
break
except Exception as e:
print(e)
print('다시 입력하세요')
start = Menu()
start.run()
오늘은 역대급으로 힘들었다.
하지만 다 하고 나니 역대급으로 뿌듯했다.
이 달콤함을 계속 즐기고싶다.
728x90
반응형
'학습일지' 카테고리의 다른 글
20230324 kdt 학습일지 (1) | 2023.03.24 |
---|---|
20230323 kdt 수업일지 (0) | 2023.03.23 |
20230321 kdt 수업일지 (0) | 2023.03.21 |
20230317 kdt 시험 (2) | 2023.03.20 |
20230320 kdt 학습일지 (0) | 2023.03.20 |