상세 컨텐츠

본문 제목

[MySQL] 주피터 누트북에 python mysql연동하고, 실습하기1

MySQL

by 주초위왕 2023. 3. 27. 23:37

본문

파이썬과 MySQL 연동하는 방법을 여기저기서 찾아보았는데 몇가지 방법을 시도 했었지만 계속 에러가 나서 지쳐 있을 때 쯤에 학원 선생님께서 연동하는 방법을 보내주셨다....울컥 ㅠㅠ

 

보내주신걸 바탕으로 주피터 노트북에서 실행해보기.

1. mysqlclient
* 파이썬에서는 MySQL 서버와 통신할 수 있는 파이썬용 데이터베이스 커넥터의 종류가 여러가지 있음
* PyMySQL, mysqlclient를 가장 많이 사용하지만 mysqlclient을 많이 사용함.
 
 
먼저 MySQL에 db랑 테이블을 새로 만들어주기.(기존꺼는 헷갈려서 다시 만듬)
 
use ecommerce;   #db명이 될거임 use해서 아래 테이블을 추가할거임

create table member2 (         
    mem_idx bigint auto_increment primary key,
    mem_userid varchar(20) unique not null,
    mem_userpw varchar(20) not null,
    mem_name varchar(20) not null,
    mem_hp varchar(20) not null,
    mem_email varchar(50),
    mem_hobby varchar(100),
    mem_ssn1 char(6) not null,
    mem_ssn2 char(7) not null,
    mem_zipcode char(5) not null,
    mem_address1 varchar(100) not null,
    mem_address2 varchar(100) not null,
    mem_address3 varchar(100) not null,
    mem_regdate datetime default now()
);

insert into member2 (mem_userid, mem_userpw, mem_name, mem_hp, mem_email,
mem_hobby, mem_ssn1, mem_ssn2, mem_zipcode, mem_address1, mem_address2, mem_address3)
values('apple', '1111', '김사과', '010-1111-1111', 'apple@apple.com','잠자기',
'001011','4018518','12345','서울 관악구','111-11','1111');
 #   데이터를 하나 넣어주기
 
select * from member2;
SELECT * FROM ecommerce.member2; #   최종확인

MySQL에서 위에를  실행하면 아래 처럼 뜬다. 이거를 고데로 주피터 노트북에 접속해서 불러와 활용할거임.

 

 

!pip install mysqlclient

import MySQLdb

db = MySQLdb.connect(host='localhost', user='root', password='1234', db='ecommerce')
 2. cursor 생성하기
* 하나의 DataBase Connection에 대하여 독립적으로 SQL문을 실행할 수 있는 작업환경을 제공하는 객체
* 하나의 connection에 동시에 한 개의 cursor만 생성할 수 있으며, cursor를 통해 SQL문을 실행하면 실행결과를 튜플 단위로 반환

cur = db.cursor()
sql = 'select mem_userid, mem_userpw, mem_name, mem_hp, mem_email, mem_hobby, mem_ssn1, mem_ssn2, mem_zipcode, mem_address1, mem_address2, mem_address3 from member2'
cur.execute(sql)

한칸 한칸씩 Ctrl + Enter 을 눌러주던가, 위에 run을 눌러주든지 편한데로 쓰기.

실행하면 맨아래 1이 뜬다. 한 사람의 데이터만 넣어놨기 때문에....!!

 

 

SQL문 결과 가져오기

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

1.
row = cur.fetchall()
print(row)

2.
cur.execute(sql)

row = cur.fetchone()
print(row)
 

 

 

fetchone()을 이용하여 루프를 돌면서 모든 데이터를 출력하기
cur.execute(sql)

while True:
    row = cur.fetchone()
    if row:
        print(row)
    else:
        break

 

 

cursor에 dictionary 형식으로 row를 유지하도록 내부 타입을 명시
cur = db.cursor(MySQLdb.cursors.DictCursor)
cur.execute(sql)

while True:
    row = cur.fetchone()
    if row:
#         print(row) # 딕셔너리
        print(f"아이디: {row['mem_userid']}, 이름: {row['mem_name']}, 전화번호: {row['mem_hp']}, 이메일: {row['mem_email']}, 이메일: {row['mem_ssn1']}, 취미: {row['mem_ssn2']}, 주민번호1: {row['mem_zipcode']}, 주민번호2: {row['mem_address1']}, 우편번호: {row['mem_zipcode']}, 주소1: {row['mem_address1']}, 주소2: {row['mem_address2']}, 주소3: {row['mem_address3']},")
    else:
        break

우편번호까지만 해 놓으면 우편번호 까지만 출력되서 나온다.

데이터 삽입하기

sql = "insert into member2(mem_userid, mem_userpw, mem_name, mem_hp, mem_email, mem_hobby, mem_ssn1, mem_ssn2, mem_zipcode, mem_address1, mem_address2, mem_address3) values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,)"
data = ('banana', '1234', '반하나', '010-2222-2222', 'banana@banana.com','자전거,영화감상',
'001011','4018518','22222','서울 서초구','111-11','1111')
cur.execute(sql, data)
db.commit()

데이터를 주피터에서 삽입하고 결과는 MySQL에서 확인한다.

SELECT * FROM ecommerce.member2;를 하고 원래 들어 있는 3개 확인.

데이터를 삽입하고 난 후 다시 SELECT * FROM ecommerce.member2; 하면 4개로 변한걸 볼 수 있다.

반응형

관련글 더보기

댓글 영역