Back-end

[Flask] 파이썬에서 db연결, PyMySQL

파리외 개발자 2022. 7. 6. 21:04

기본 세팅

PyMySQL설치 (설치 경로 유의)

DB생성 (여기서 자세하게 다루진 않습니다)

  • MySQL 설치
  • root user에 권한 부여(GRANT)
  • 여기선 새로운 user인 blog생성한 상태(마찬가지로 권한 부여)
  • CREATE로 DB생성

blog_db가 생성되었으면 같은 이름으로 생성할때 이미 존재한다고 메세지가 뜬다.

show databases명령으로 존재하는 db를 확인할 수 있다.

use blog_db 명령어로 아까 생성한 db를 사용하도록 한다.

해당 db에 create table 명령으로 테이블을 하나 생성해주며 db생성을 마친다.

 

DB 연결

pip로 다운받았던 pymysql을 import하고

connect메소드에 파라미터값을 지정하고 

MYSQL_CONN라는 이름의 connect 객체를 생성하여 db와 연결을 한다.

connect객체가 연결되었는지 확인하기 위해

connect객체에서 cursor객체를 가져와 test를 print해본다.

 

SQL문 사용

test라는 이름 대신 SQL_cursor이름으로 커서 객체를 생성하고

cursor객체에 execute를 사용해 sql문을 집어넣어본다.

SHOW TABLES의 execute결과는 1로 터미널 창에 출력된다.

아까 테이블을 하나만 생성했기에 나오는 결과이다.

테이블 생성

이번엔 새로 테이블을 하나 더 생성해본다.

sql문을 작성하고 execute로 실행한다.

sql문을 실행하는 것은 cursor객체의 execute면 실행되지만

db를 변경하는 사항은 connect객체의 commit도 사용해준다.

일전의 show tables문은 1을 리턴했고

새로운 test라는 테이블을 생성한 후

show tables은 2를 리턴하게 된다.

테이블 삭제

이번엔 drop으로 방금 만든 test라는 테이블을 삭제해본다.

마찬가지로 db변경이 있으므로 commit을 사용해준다.

test테이블을 삭제한 후 show를 확인해보니

테이블이 하나 남았다고 1을 리턴해준다.

 

테이블에 데이터 삽입

이번엔 user_info 테이블에 insert문을 사용해

값을 넣어본다.

테이블 데이터 조회

조회를 위한 select문을 execute한 뒤

가져온 데이터를 모두 담기 위해서

커서 객체에서 fetchall을 사용해 results에 담아준다.

(fetchall = 모두 가져오기, fetchone = 하나만 가져오기)

나열된 데이터인 results를 for문을 사용해 모두 출력해본다.

일전에 삽입했던 데이터가 출력되는 것을 볼 수 있다.

데이터를 두개 더 삽입하고 select문으로 조회하니

세 개의 데이터 모두 조회가 되는 것을 확인할 수 있다.

데이터 삭제

delete문을 사용해 user_id가 2인 데이터를 삭제한다.

일전에 db생성시 user_id는 auto increment로 자동으로 매겨지는 속성으로 설정했기에

user_id=2는 두번째 데이터를 삭제하는 것이다.

하나의 데이터가 지워졌다는 1이 리턴이되며

다시 select로 데이터를 조회하니

두번째 데이터가 사라진 두개의 데이터만 조회된다.

데이터베이스 연결 끊기

필요한 모든 sql문을 다 사용했다면 마지막으로 db연결을 끊어준다.