파이썬과 MySQL의 연동
pymysql라이브러리를 이용하면 파이썬과 MySQL을 연동하는 데이터베이스 연동 프로그램을 작성할 수 있음
01. pymysql설치
Anaconda Prompt를 실행
「pip install pymysql」을 입력해, pymysql을 다운로드
02. 파이썬에서 데이터 입력
- mysql 연결하기
- 연결자 = pymysql.connect(연결옵션)
- 커서 생성하기
- 커서이름 = 연결자.cursor()
- 테이블 만들기
- 커서이름.execute("CREATE TABLE 문장")
- 데이터 입력하기
- 커서이름.execute("INSERT 문장")
- 입력한 데이터 저장하기
- 연결자.commit()
- 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. 데이터 조회
- mysql 연결
- 연결자 = pymysql.connect(연결 옵션)
- 커서 생성
- 커서이름 = 연결자.cursor()
- 데이터 조회
- 커서이름.execute("SELECT 문장")
- 조회한 데이터 출력
- 커서이름.fetchone()
- 커서이름.fetchall()
- 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
'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 |