02_Database

16_파이썬-mySQL 연동

chuuvelop 2025. 1. 30. 17:59
728x90
파이썬과 MySQL의 연동

 

pymysql라이브러리를 이용하면 파이썬과 MySQL을 연동하는 데이터베이스 연동 프로그램을 작성할 수 있음

 

01. pymysql설치

 

Anaconda Prompt를 실행

 

「pip install pymysql」을 입력해, pymysql을 다운로드

 

 

02. 파이썬에서 데이터 입력

  1. mysql 연결하기
    • 연결자 = pymysql.connect(연결옵션)
  2. 커서 생성하기
    • 커서이름 = 연결자.cursor()
  3. 테이블 만들기
    • 커서이름.execute("CREATE TABLE 문장")
  4. 데이터 입력하기
    • 커서이름.execute("INSERT 문장")
  5. 입력한 데이터 저장하기
    • 연결자.commit()
  6. mysql 연결 종료하기
    • 연결자.close()

 

03. mysql연결

pymysql.connect(host = 서버IP주소, user = 사용자, password = 암호, db = 데이터베이스, charset = 문자세트, port = 포트번호)

 

# pip install pymysql
import pymysql
conn = pymysql.connect(host = "127.0.0.1", user = "root", password = "0000", db = "market_db")

 

  • conn : 연결자를 의미하는 connection의 약자
    • 관습적으로 conn 또는 con 이라는 변수명을 사용함
 
04. 커서 생성
  • 커서(cursor) : 데이터베이스에 sql문을 실행하거나 실행된 결과를 받는 통로
  • 커서는 앞 단계에서 연결한 연결자에 만들어야 함
cur = conn.cursor()

 

05. 테이블 생성
  • 테이블을 생성하는 sql문을 커서이름.execute() 함수의 매개변수로 전달
cur.execute("""CREATE TABLE user_table (id char(4), user_name char(15), email char(20),
            birth_year int)""")
0

 

06. 데이터 입력
cur.execute("""INSERT INTO user_table VALUES ("hong", "홍지윤", "hong@naver.com", 1996)""") cur.execute("""INSERT INTO user_table VALUES ("kim", "김태연", "kim@daum.net", 2011)""") cur.execute("""INSERT INTO user_table VALUES ("star", "별사랑", "star@paran.com", 1990)""")
1

 

07. 입력한 데이터 저장
  • 앞 단계에서 입력한 데이터가 아직 데이터베이스에 완전히 반영되지 않았음
  • 현재까지의 입력 데이터를 완전히 데이터베이스에 반영하는 커밋을 해야함
conn.commit()

 

08. 연결 종료
  • 데이터베이스 사용 후에는 연결자를 닫아줘야 함
conn.close()

 

 

09. 연동 프로그래밍 활용

conn = pymysql.connect(host = "127.0.0.1", user = "root", password = "0000", db = "market_db")

cur = conn.cursor()

user_id = input("사용자 ID ==> ")
user_name = input("사용자 이름 ==> ")
user_email = input("사용자 이메일 ==> ")
user_birth = input("사용자 출생연도 ==> ")

sql = f"""INSERT INTO user_table VALUES
    ('{user_id}', '{user_name}', '{user_email}', {int(user_birth)})"""

cur.execute(sql)

conn.commit()
conn.close()


사용자 ID ==>  yang
사용자 이름 ==>  양지은
사용자 이메일 ==>  yang@gmail.com
사용자 출생연도 ==>  1993

 

 

10. 데이터 조회
  1. mysql 연결
    • 연결자 = pymysql.connect(연결 옵션)
  2. 커서 생성
    • 커서이름 = 연결자.cursor()
  3. 데이터 조회
    • 커서이름.execute("SELECT 문장")
  4. 조회한 데이터 출력
    • 커서이름.fetchone()
    • 커서이름.fetchall()
  5. mysql 연결 종료
    • 연결자.close()
  • 조회는 데이터를 입력하거나 변경하는 것이 아니므로 굳이 저장(커밋)을 할 필요는 없음

conn = pymysql.connect(host = "127.0.0.1", user = "root", password = "0000", db = "market_db")

cur = conn.cursor()

cur.execute("""SELECT * FROM user_table""")

print("사용자ID\t사용자이름\t이메일\t출생연도")
print("-" * 40)

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

    print(f"{row[0]}\t{row[1]}\t{row[2]}\t{row[3]}")

conn.close()


사용자ID	사용자이름	이메일	출생연도
----------------------------------------
hong	홍지윤	hong@naver.com	1996
kim	김태연	kim@daum.net	2011
star	별사랑	star@paran.com	1990
yang	양지은	yang@gmail.com	1993

 


conn = pymysql.connect(host = "127.0.0.1", user = "root", password = "0000", db = "market_db")

cur = conn.cursor()

cur.execute("""SELECT * FROM user_table""")

print("사용자ID\t사용자이름\t이메일\t출생연도")
print("-" * 40)

row = cur.fetchall()

for i in row:
    print(f"{i[0]}\t{i[1]}\t{i[2]}\t{i[3]}")

conn.close()


사용자ID	사용자이름	이메일	출생연도
----------------------------------------
hong	홍지윤	hong@naver.com	1996
kim	김태연	kim@daum.net	2011
star	별사랑	star@paran.com	1990
yang	양지은	yang@gmail.com	1993
row
(('hong', '홍지윤', 'hong@naver.com', 1996),
 ('kim', '김태연', 'kim@daum.net', 2011),
 ('star', '별사랑', 'star@paran.com', 1990),
 ('yang', '양지은', 'yang@gmail.com', 1993))

 

type(row)
tuple

 

 

11. with문

with pymysql.connect(host = "127.0.0.1", user = "root", password = "0000",
                     db = "market_db") as conn:
    with conn.cursor() as cur:
        sql = '''SELECT * FROM user_table'''
        cur.execute(sql)

        print("사용자ID\t사용자이름\t이메일\t출생연도")
        print("-" * 40)
        
        row = cur.fetchall()
        
        for i in row:
            print(f"{i[0]}\t{i[1]}\t{i[2]}\t{i[3]}")


사용자ID	사용자이름	이메일	출생연도
----------------------------------------
hong	홍지윤	hong@naver.com	1996
kim	김태연	kim@daum.net	2011
star	별사랑	star@paran.com	1990
yang	양지은	yang@gmail.com	1993
728x90

'02_Database' 카테고리의 다른 글

15_트랜잭션(Transaction)  (3) 2025.01.30
14_CMD에서 MySQL 조작  (0) 2025.01.30
13_정규화  (0) 2025.01.30
12_인덱스(index)  (2) 2025.01.30
11_뷰(View)  (3) 2025.01.29