상세 컨텐츠

본문 제목

Python과 MySQL 연동하기

MySQL

by 아리벱 2024. 3. 28. 16:59

본문

데이터베이스와 파이썬을 연동하는 방법을 알아야 데이터베이스를 활용하여 프로그램을 구현할 수 있습니다. 데이터베이스, 파이썬을 독립적으로 사용한다면 활용범위가 제한적일 수밖에 없습니다.

 

파이썬에는 여러 커넥터가 존재하지만 저희는 속도가 빠른 mysqlclient를 이용해보겠습니다!

 

1. MySQLclient

  • 파이썬에서는 MySQL 서버와 통신할 수 있는 파이썬용 데이터베이스 커넥터를 다양하게 지원
  • PyMySQL, mysqlclient를 가장 많이 사용함
  • 사용법은 비슷하나 속도가 빠른 mysqlclient를 권장하고 있음

 

mysqlclient를 설치했으니 이제 MySQL에 접속하겠습니다.

1-1. MySQL 접속하기

  • MySQLdb.connect(host='IP주소', user='사용자', password='비밀번호', db='DB명')

1-2. cursor 생성하기

  • 하나의 DataBase Connection에 대해 독립적으로 SQL문을 실행할 수 있는 작업환경을 제공하는 객체
  • 하나의 connection에 동시에 한 개의 cursor만 생성할 수 있으며, cursor를 통해 SQL문을 실행하면 실행결과를 튜플 단위로 반환

1-3. SQL문 결과 가져오기

  • fetchall(): 한번에 모든 tuple을 가져옴. 검색 결과가 매우 많다면 메모리 오버헤드가 발생할 수 있음
  • fetchone(): 한번에 하나의 tuple을 가져옴. 다시 fetchone()메서드를 호출하면 다음 데이터를 가져옴

fetchall()은 한 번에 모든 데이터를 튜플 형태로 불러옵니다.
fetchone()은 한 번에 하나의 데이터를 튜플 형태로 불러옵니다.

 

for문과 while문을 각각 이용하여 fetchone()을 통해 member테이블의 모든 데이터 출력이 가능합니다.

 

튜플형태뿐만 아니라 딕셔너리타입으로 데이터를 불러올 수도 있습니다.

1-4. dict 형태로 결과를 반환하기

  • cursor(MySQLdb.currsos.DictCurso)

fetchall을 이용하여 member 테이블의 모든 데이터를 딕셔너리 타입으로 나타낼 수 있습니다.
fetchone과 while을 이용하여 member테이블의 모든 데이터를 출력합니다.

 

데이터 베이스에 연결하고 커서를 만들어줬다면 닫는 방법도 알아야합니다.

1-5. Cursor와 Connection 닫아주기

 

 

2. 데이터 삽입하기

 

커서와 데이터케이스를 닫았으니 다시 연결해줍니다.

 

데이터를 삽입할 때는 sql문과 sql문에 입력하여 데이터 삽입 값 두 가지를 고려해야합니다.

* commit()은 모든 작업을 정상적으로 처리하겠다고 확정하는 명령어입니다.

 

 

정리하면 데이터 베이스 작업은 다음과 같습니다.

  1. 연결 (Connect)
  2. 작업 수행 (Execute)
  3. 변경 내용을 데이터베이스에 반영 (Commit)

 

MySQL에 연동하여 데이터를 삽입하는 방법에 대해 익혔습니다. 예제를 통해 복습해보겠습니다.

 

문제

  • 회원가입 프로그램을 만들어보자
  • 단, 중복 데이터 또는 잘못된 데이터로 인한 오류시 "다시 입력하세요"라는 메세지와 함께 다시 등록
  • 단, 회원 가입 후 "추가로 가입하시겠습니까?(Y/N)"을 입력받아 추가로 입력할 수 있도록 함

 

 

 

 

 

문제를 풀 생각의 흐름은 다음과 같습니다.

MySQL 데이터베이스에 연결합니다. while문을 통해 추가로 가입하지 않을 때까지 무한루프를 돌려줍니다.

또 try-except구문을 사용하여 에러가 발생할 때는 프로그램이 중단되지 않고 중단된 이유를 출력하도록 합니다.

input() 함수를 이용하여 값을 입력받아 데이터베이스에 저장까지 완료했으면 회원가입을 추가로 할지 말지에 대한 코드를 작성합니다. if 조건문에서 입력값을 소문자로 다 바꾸는 작업을 통해 코드를 간소화할 수 있습니다.(이 경우에 대문자로 바꾸어도 관계 없습니다.) n인 경우에는 무한루프를 끝내고 n이 아닌 경우에는 추가로 회원가입을 합니다.

 

 

3. 데이터 수정하기

데이터베이스의 테이블의 데이터를 수정하기 위해서는 update 쿼리를 이용합니다.

1개의 update가 정상적으로 실행됐다면 result = 1로 '수정되었습니다.'를 출력할 것입니다. 반면 정상적으로 실행되지 않았다면 result = 0으로 '에러!'가 출력할 것입니다.

 

 

데이터 삽입, 수정까지 할 줄 알았으니 이제 삭제하는 방법에 대해서 알아보겠습니다.

 

4. 데이터 삭제하기

1개의 delete 쿼리가 정상적으로 실행됐다면 result = 1로 '탈퇴되었습니다.'를 출력할 것입니다. 반면 정상적으로 실행되지 않았다면 result = 0으로 '오류!'를 출력할 것입니다.

 

데이터 삽입, 수정, 삭제까지 익혀보았습니다. 다음 예제를 통해서 복습해보겠습니다!

위에서 회원가입 프로그램을 만들어봤으니 이번에는 로그인 프로그램을 만들어보겠습니다.

 

 

문제

  • 로그인 프로그램을 작성해보자
  • 아이디, 비밀번호가 맞을 경우 "로그인 되었습니다", 틀린 경우 "아이디 또는 비밀번호를 확인하세요"라고 출력

userid와 userpw가 input()함수를 통해 입력된 값입니다. 입력된 값이 member테이블에 존재하는 userid와 userpw와 같다면 select쿼리를 통해 userid가 select될 것입니다. 따라서 result가 1일 것입니다.

반면, input()을 통해 입력된 값이 member 테이블에 존재하는 값과 상이할 경우 result는 0일 것입니다. 

member테이블 값과 일치한 경우
member 테이블의 userid, userpw 모두 상이한 경우
member테이블의 userpw만 상이한 경우

 

 

참고로 member 테이블의 userid, userpw는 다음과 같습니다.

 

 

 


오늘은 파이썬과 MySQL을 연동하여 파이썬 코드로 데이터베이스를 조작하는 방법을 배웠습니다.

파이썬 문법, MySQL 독립적으로 문법과 연결하여 문법을 익히는 데에는 상대적으로 쉬웠던 것 같습니다. 반면 예제를 통해서 실제 구현할 때에 어려움을 겪었습니다. 많은 오류들을 경험하여 시행착오를 겪어야 성장할 것 같다고 생각이 들어 많은 프로그램들을 짜도록 노력해야할 것 같습니다.🤔

 

'MySQL' 카테고리의 다른 글

MySQL 03. 문법(2)(서브 쿼리, View..등)  (0) 2024.03.29
MySQL 02. 문법  (0) 2024.03.27
Python 25. MySQL 첫걸음...  (0) 2024.03.25

관련글 더보기