-
[Python] 파이썬에서 MySQL(MariaDB) 사용하기Programming Language/Python 2021. 1. 25. 07:28
MySQL(MariaDB)을 파이썬에서 사용이 가능하다.
몇몇 과정만 거치면 간단하게 쓸 수 있다.
1. pymysql 라이브러리 설치
- 파이썬 자체에는 MySQL 인식 기능이 없기 때문에 외부 라이브러리를 설치해야 한다.
- 명령 프롬프트(cmd) 창을 켠 뒤에 pip install pymysql 을 입력한다.
- 'Successfully installed pymysql' 문구가 보이면 제대로 설치가 된 것이다.
2. 파이썬에서 MySQL 활용하기
1) 데이터베이스 연결
- pymysql을 import 하고 다음과 같이 데이터베이스를 연결한다.
# (1) DB연결 import pymysql conn = pymysql.connect (host='127.0.0.1',user ='root',password='본인 비밀번호',db='본인 db',charset='utf8') # (2) DB닫기 conn.close()
- 데이터베이스에 연결하기 위해 pymysql의 connect 함수를 이용해 인수를 적절히 넣어준다.
- 대체적으로 다들 본인 로컬에 DB를 설치하고 사용할 것이므로 user는 'root일 것이다.
- 그다음엔 각자 root의 비밀번호랑 db이름을 넣어서 실행하면 된다.
2) 커서 생성
- 일련의 데이터에 순차적으로 액세스 할 때 검색 및 현재 위치를 포함하는 데이터 요소이다.
- 쉽게 말해 쿼리 결과를 가져오면서 여러 컬럼 중에서 특정 컬럼의 위치정보도 포함하고 있는 셈이다.
cur = conn.cursor()
- cursor( ) 대신 DictCursor( )도 사용할 수 있는데 각각 결과를 튜플/딕셔너리 형태로 받아온다.
3) 입력 데이터 저장
- 파이썬을 통해서 데이터베이스에 데이터를 저장했다면 임시로 저장된 상태이다.
- 확실하게 데이터베이스에 정보를 업데이트하려면 'commit'을 해야 한다.
conn.commit()
3) 쿼리 실행 및 결과 반환
- execute( ) 함수를 통해서 쿼리를 실행할 수 있다.
- 쿼리 실행 후 결과는 fetch( )를 통해 가져올 수 있고 3가지 종류가 있다.
※ fetch( ) 종류
메소드 설명 fetchall( ) 쿼리 실행 결과 모든 데이터를 한 번에 가져옴 fetchone( ) 쿼리 실행 결과 호출할 때마다 한 행만 가져옴 fetchmany(n) 쿼리 실행 결과 n개 만큼의 데이터만 가져옴 - 상황에 맞춰서 적절한 메소드를 선택하면 될 것 같다.
3. pymysql 실습
1) 데이터베이스 연결
import pymysql def dbconnect() : conn = pymysql.connect (host='127.0.0.1',user ='root',password='비밀번호',db='db이름',charset='utf8') return conn def main(): conn = dbconnect() # DB 연결 print('연결완료') conn.close() # DB 연결 끊기 print('연결해제') if __name__=="__main__" : main()
- 단순히 DB가 연결되고 끊기는 예제다.
2) 데이터 조회
import pymysql def dbconnect() : conn = pymysql.connect (host='127.0.0.1',user ='root',password='비밀번호',db='db이름',charset='utf8') return conn def search_data(conn): cur = conn.cursor() sql = 'SELECT * FROM 테이블' cur.execute(sql) results = cur.fetchall() print(results) def main(): conn = dbconnect() # DB 연결 print('연결완료') search_data(conn) conn.close() # DB 연결 끊기 print('연결해제') if __name__=="__main__" : main()
- 간단하게 DB에 연결해서 테이블의 정보를 읽어와서 출력하는 예제다.
- results에 fetchall( )을 사용했으므로 테이블의 모든 결과가 묶여서 results에 저장된다.
3) 데이터 삽입
import pymysql def dbconnect() : conn = pymysql.connect (host='127.0.0.1',user ='root',password='비밀번호',db='db이름',charset='utf8') return conn def insert_data(conn): cur = conn.cursor() name = input('등록할 사용자의 이름을 입력하세요.') year = input('등록할 사용자의 생년을 입력하세요.') addr = input('등록할 사용자의 주소를 입력하세요.') sql = "INSERT INTO 테이블 (name, birth_year, addr) VALUES('"+name+"', '"+year+"', '"+addr+"')" cur.execute(sql) conn.commit() def main(): conn = dbconnect() # DB 연결 print('연결완료') insert_data(conn) conn.close() # DB 연결 끊기 print('연결해제') if __name__=="__main__" : main()
- 데이터를 삽입하는 예제다.
- 데이터베이스의 정보에 변동을 주는 내용이므로 꼭 'commit'을 해준다.
4) 데이터 삭제
import pymysql def dbconnect() : conn = pymysql.connect (host='127.0.0.1',user ='root',password='비밀번호',db='db이름',charset='utf8') return conn def insert_data(conn): cur = conn.cursor() name = input("삭제할 사용자의 이름을 입력하세요 : ") cur.execute("SELECT user_id FROM 테이블 WHERE name = '"+name+"'") u_id = cur.fetchone() sql = "DELETE FROM 테이블 WHERE user_id = '"+u_id+"'" cur.execute(sql) conn.commit() def main(): conn = dbconnect() # DB 연결 print('연결완료') insert_data(conn) conn.close() # DB 연결 끊기 print('연결해제') if __name__=="__main__" : main()
- 이름을 입력받아 그에 해당하는 유저 id(기본키)를 찾고 삭제하는 예제다.
- 마찬가지로 DB에 변경 결과를 저장하므로 'commit'을 해준다.
※ 이 게시물은 '이것이 MySQL이다' 교재와 엔코아 플레이데이터에서 배운 내용을 토대로 작성되었습니다.
'Programming Language > Python' 카테고리의 다른 글
[Python] 문자열이 숫자인지 문자인지 판단하는 법(isdigit(), isalpha(), isalnum(), isdecimal(), isnumeric() (0) 2022.08.08 [Python] Jupyter Notebook 설치 (Windows용) (0) 2020.12.25 [Python] 파이썬 설치 (Windows용) (0) 2020.12.21