[SQL, Python] Python with MySQL

박미영·2023년 4월 25일
0

📌Install MySQL Driver

Python 에서 MySQL 을 사용하기 위해서 MySQL Driver 설치

pip install mysql-connector-python

위와 같이 설치하니 error 발생해서 아래 코드 install 했다.

pip install mysql-connector-python-rf



import mysql.connector



📌Create Connection

  • Local Database 연결
local = mysql.connector.connect(
    host= "localhost",
    user = "root",
    password = "zerobase"
)



  • Local MySQL의 zerobase(database)에 연결
local = mysql.connector.connect(
    host= "localhost",
    user = "root",
    password = "zerobase",
    database = "zerobase"
)



  • AWS RDS(Database-1) 연결
remote = mysql.connector.connect(
    host= "AWS엔드포인트",
    port = 3306,
    user = "admin",
    password = "zerobase"
)



  • AWS RDS(database-1)의 zerobase(database)에 연결
remote = mysql.connector.connect(
    host= "AWS엔드포인트",
    port = 3306,
    user = "admin",
    password = "zerobase",
    database = "zerobase"
)



📌Close Database

local.close()
remote.close()



📌Execute SQL

- Execute SQL 예제 1

  • 테이블 생성
remote = mysql.connector.connect(
    host= "AWS엔드포인트",
    port = 3306,
    user = "admin",
    password = "zerobase",
    database = "zerobase"
)

cur = remote.cursor()
cur.execute("CREATE TABLE sql_file (id int, filename varchar(16))")

remote.close()
  • 확인



- Execute SQL 예제 2

  • 테이블 삭제
remote = mysql.connector.connect(
    host= "AWS엔드포인트",
    port = 3306,
    user = "admin",
    password = "zerobase",
    database = "zerobase"
)

cur = remote.cursor()
cur.execute("DROP TABLE sql_file")

remote.close()



- Execute SQL File 예제 1

SQL File 실행하기 위한 코드


  • test03.sql file
CREATE TABLE sql_file
(
    id int,
    filename varchar(16)
);



  • test03.sql 생성
# python file
remote = mysql.connector.connect(
    host= "AWS엔드포인트",
    port = 3306,
    user = "admin",
    password = "zerobase",
    database = "zerobase"
)

cur = remote.cursor()
sql = open("test03.sql").read()
cur.execute(sql)

remote.close()



- Execute SQL File 예제 2

SQL File 내에 Quary가 여러 개 존재하는 경우

  • test03.sql file
INSERT INTO sql_file VALUES (1, "test01.sql");
INSERT INTO sql_file VALUES (2, "test02.sql");
INSERT INTO sql_file VALUES (3, "test03.sql");
INSERT INTO sql_file VALUES (4, "test04.sql");



  • test04.sql 생성

⚠️오류 발생 코드

remote = mysql.connector.connect(
    host= "AWS엔드포인트",
    port = 3306,
    user = "admin",
    password = "zerobase",
    database = "zerobase"
)

cur = remote.cursor()
sql = open("test04.sql").read()
cur.execute(sql)

remote.close()

  • 💡해결 방법

InterfaceError: Use multi=True when executing multiple statements
쿼리 문이 여러 개 있을 땐 multi=True를 작성해야한다.

remote = mysql.connector.connect(
    host= "AWS엔드포인트",
    port = 3306,
    user = "admin",
    password = "zerobase",
    database = "zerobase"
)

cur = remote.cursor()
sql = open("test04.sql").read()

for result_iterator in cur.execute(sql, multi=True):
    if result_iterator.with_rows:
        print(result_iterator.fetchall())
    else:
        print(result_iterator.statement)

remote.commit()
remote.close()





📌Fetch All

실행하는 쿼리가 아닌 조회하는 쿼리를 실행할때와 같이 데이터를 가지고 있는 경우 fetch all을 사용하여 데이터를 가져 올 수 있다.

mycursor.execute(<query>)

result = mycursor.fetchall()
for data in result:
print(data)

Fetch All 예제

  • sql_file 테이블 조회 (읽어올 데이터 양이 많은 경우 buffered=True)
remote = mysql.connector.connect(
    host= "AWS엔드포인트",
    port = 3306,
    user = "admin",
    password = "zerobase",
    database = "zerobase"
)
cur = remote.cursor(buffered=True)
cur.execute("SELECT * FROM sql_file")
result = cur.fetchall()

result


for result_iterator in result:
    print(result_iterator)



  • 참고, 검색결과를 Pandas로 읽기
import pandas as pd
df = pd.DataFrame(result)
df




"이 글은 제로베이스 데이터 취업 스쿨 강의를 듣고 작성한 내용으로 제로베이스 데이터 취업 스쿨 강의 자료 일부를 발췌한 내용이 포함되어 있습니다."

0개의 댓글