22강. 파이썬과 MySQL 연동하기
08-2. 파이썬과 MySQL의 연동
👉🏻DB 연동
- MySQL 테이블에 접근할 때 SQL문을 통해 접근했었음
- 그런데 일반 사용자는 SQL문을 알지 못함
- 그래서 파이썬으로 일반 사용자는 간단한 명령어 만으로 파이썬 응용 프로그램을 통해서 DB를 사용하게 하는 것
👉🏻 연동 프로그래밍 기본
🧩 활용할 쇼핑몰 DB
- DB만 만들고 테이블부터는 파이썬으로
🎮 DB 만들기
- MySQL 워크스페이스에서는 DB만 만든다
🧩 절차
- 파이썬에서 MySQL로 연결해야함
✅ 커서
- 연결 후에 연결을 통해 쿼리문을 전달하는 도구
- SQL문을 커서에 실어서 전달하는 도구
- 커서를 통해 테이블을 만든다
- 데이터를 입력하는 것은 여러번 가능하기 때문에 필요한 만큼 반복
- 입력이 다 끝나면 하는 APPLY = COMMIT
- 다음에 같은 테이블에 입력할 때는 테이블 만들기 부분만 생략하면 됨
🎮 파이썬 실습
- 아무 메시지 안 나오면 잘 된 것
1️⃣ MySQL 연결하기
- connection 변수 이름을 conn, 연결자라고 생각하면 된다
- 연결할 호스트 127.0.0.1: 파이썬이 깔려있는 컴퓨터에 MySQL도 설치되어 있다
- 자기 자신이라는 뜻
- 다른 컴퓨터에서 할 경우 그 컴퓨터 ip로 바꿔주면 됨
- 유저, 비밀번호 등 또한 사용하는 것에 맞게 바꿔주면 된다
- charset은 한글이 깨지지 않도록 utf8
- 아무 메시지가 안 나오면 잘 한 것
2️⃣ 커서 생성하기
- 거의 변경 없이 사용하는 코드
3️⃣ 테이블 만들기
- 0 나오면 잘 된 것
- 다시 실행하면 오류난다. 이미 테이블이 있으니
4️⃣ 데이터 입력하기
- 1은 한 개의 행이 잘 들어갔다는 의미
- 나머지 데이터도 넣기
5️⃣ 입력한 데이터 저장하기
6️⃣ MySQL 연결 종료하기
🎮 MySQL Workbench에서 확인해보기
* 이건 흐름을 파악하기 위함이고 이런 흐름을 담은 파일을 만들어 사용자들이 실행하도록해야
사용자들이 파이썬이나 SQL문을 몰라도 사용할 수 있게 되는 것이다
🎮 한 파일로 만들기
- IDLE 실행 후 NEW FILE 열기
- pymysql 을 import
- 변수를 미리 준비하고 None으로 비어있게 만든다
- 입력 받을 변수도 준비하고 비워둔다
- sql문 변수도 준비하고 비워둔다
- MySQL 연결과 커서 만드는 것은 위와 같다
- 테이블 만들기는 위에서 했기 때문에 생략
- 이번에는 사용자가 원하는 만큼 입력할 수 있도록 while (True) 사용
- ID를 먼저 입력해야한다
- ID 없이 그냥 엔터쳐버리면 그만 입력하겠다는 의미로 받아들임
- 사용자가 입력한 내용을 DB에 넣어줘야한다
- INSERT문
- 입력받은 내용들을 조합하기 위해 +를 이용한다
- 조합을 통해 만들어진 SQL문을 sql 변수에 넣어
- cur.execute() 함수 안에 넣어주면 위에서 한 줄씩 입력한 것과 같은 방식으로 입력할 수 있는 것이다
- 다 끝났으면 커밋
- 닫으면된다
- 실행해보기
이렇게 입력할 수 있게 됨
- 다시 다음 사용자를 입력할 수 있도록 나오는데 더이상 입력하지 않으려면 그냥 엔터치면 됨
- 다시 조회해보면
👉🏻 데이터 조회
- 마찬가지로 전역변수를 준비한다
- 이번에는 SQL문이 고정되어있기 때문에 전역변수 선언부에서 선언하지 않는다
- 읽어올 행을 위한 row변수를 준비한다
- 연결과 커서준비는 똑같다
- 고정된 SQL문
- 표처럼 보이게 하기 위한 print문
- 몇 건인지 알 수 없으니 반복 횟수를 정하지 않고 while(True)로 한 뒤 행이 끝날 때 까지 반복한다
- 테이블에 있는 데이터들을 cur에 담아 둔다
- cur.fetchone()은 cur에 담긴 데이터들을 한 건씩 (맨 위에 있는 것)가져온다는 것이다
- 읽은 게 없다면 while문을 빠져 나간다
- 각 열에 들은 내용들을 data1 ~ 4 변수에 담은 다음
- 5글자, 15글자, 20글자, 숫자 형식에 맞춰 각각을 print해준다
- 커밋은 변경이 있을 때만 하면 된다 조회에서는 필요 없다
- 닫는다
- 실행하면 이렇게 조회할 수 있음
- 칸 조절은 글자수로 한거
출처: https://youtu.be/Se1ImwcqmlA?si=w0PtzHRnk0YxHTgF