SQL : 13. Python with MySQL - 1

yeppi1802·2024년 6월 10일
0

❇️ 요약

  • Python with MySQL 실습환경
  • Python with MySQL
  • Execute SQL

📖 Python with MySQL 실습환경

🔆 jupyter Notebook 실행

  • VSCode 혹은 웹브라우저를 통해 실행하고, ds_study환경에서 작업
  • 실행위치 : jupyter notebookmysql은 모두 sql_ws 폴더에서 시작
  • AWS RDS로 생성한 database-1 모두 사용

🔆 데이터 삭제

  • AWS RDS(database-1) zerobase의 police_station 테이블의 데이터를 모두 지운다.
(base) C:\Users\user>conda activate da_study

(da_study) C:\Users\user>cd C:/sql_ws

(da_study) C:\sql_ws>code .

(da_study) C:\sql_ws>mysqldump --set-gtid-purged=OFF  -h myhostname -P 3306 -u admin -p zerobase police_station -r backup_police.sql
Enter password: *********

(da_study) C:\sql_ws>mysql -h myhostname -P 3306 -u admin -p zerobase
Enter password: *********
...

mysql> DELETE FROM police_station;
Query OK, 4 rows affected (0.01 sec)

🔆 python.ipynb 파일 생성


📖 Python with MySQL

🔆 Python으로 Mysql 접속후 사용하는 방법

🔆 Install MySQL Driver

  • Python에서 MySQL을 사용하기 위해서는 먼저 MySQL Driver를 설치
pip install mysql-connector-python
  • 설치 확인
import mysql.connector

🔆 Create Connection

  • MySQL에 접속하기 위한 코드
mydb = mysql.connector.connect(
	host = "hostname",
	user = "username",
	password = "password"
)
mydb = mysql.connector.connect(
	host = "hostname",
	port = "port",  # 원격으로 접속하는 경우
	user = "username",
	password = "password",
	database = "dbname" # 데이터베이스 지정하는 경우 
)

🔆 Close Database

import mysql.connector

# 연결 후 
mydb = mysql.connector.connect(
	host = "hostname",
	user = "username",
	password = "password",
	database = "dbname"
)

# CLose
mydb.close()

🔆 특정 Database에 접속하기 위한 코드

import mysql.connector

mydb = mysql.connector.connect(
	host = "hostname",
	port = "port",
	user = "username",
	password = "password",
	database = "dbname" # 데이터베이스 지정하는 경우 
)

☁️ 실습

☁️ Install MySQL Driver

  • 설치하기
PS C:\sql_ws> conda activate da_study
PS C:\sql_ws> pip install mysql-connector-python
Collecting mysql-connector-python
  Downloading mysql_connector_python-8.4.0-cp38-cp38-win_amd64.whl.metadata (2.0 kB)
Downloading mysql_connector_python-8.4.0-cp38-cp38-win_amd64.whl (14.4 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.4/14.4 MB 10.1 MB/s eta 0:00:00
Installing collected packages: mysql-connector-python
Successfully installed mysql-connector-python-8.4.0
  • 설치 확인

import mysql.connector

☁️ Local Database 연결

import mysql.connector

local = mysql.connector.connect(
    host = "localhost",
    user = "root",
    password = "****"
)

☁️ AWS RDS(database-1) 연결

remote = mysql.connector.connect(
    host = "myhostname",
    port = 3306,
    user = "admin",
    password = "********"
)

☁️ Close Database

local.close()
remote.close()

☁️ Local MySQL의 zerobase 연결

import mysql.connector

local = mysql.connector.connect(
    host = "localhost",
    user = "root",
    password = "****",
    database = "zerobase"
)

local.close()

☁️ AWS RDS(database-1)의 zerobase에 연결

remote = mysql.connector.connect(
    host = "myhostname",
    port = 3306,
    user = "admin",
    password = "********",
    database = "zerobase"
)

remote.close()

📖 Execute SQL

🔆 Execute SQL

  • Query를 실행하기 위한 코드
import mysql.connector

mydb = mysql.connector.connect(
	host = "hostname",
	user = "username",
	password = "password",
	database = "dbname"

mycursor = mydb.cursor()
mycursor.execute(query);

🔆 Execute SQL File 1

  • SQL File을 실행하기 위한 코드
mydb = mysql.connector.connect(
	host = "hostname",
	user = "username",
	password = "password",
	database = "dbname"

mycursor = mydb.cursor()

sql = open("filename.sql").read()
mycursor.execute(sql);

🔆 Execute SQL File 2

  • SQL File 내에 Query가 여러개 존재하는 경우
mydb = mysql.connector.connect(
	host = "hostname",
	user = "username",
	password = "password",
	database = "dbname"

mycursor = mydb.cursor()

sql = open("filename.sql").read()
result = mycursor.execute(sql, multi = True);

☁️ 실습

☁️ Execute SQL - 테이블 생성

remote = mysql.connector.connect(
    host = "myhostname",
    port = 3306,
    user = "admin",
    password = "********",
    database = "zerobase"
)

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

remote.close()
  • 결과 확인
PS C:\sql_ws> mysql -h myhostname -P 3306 -u admin -p zerobase
...

mysql> desc sql_file;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int         | YES  |     | NULL    |       |
| filename | varchar(16) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

☁️ Execute SQL - 테이블 삭제

remote = mysql.connector.connect(
    host = "myhostname",
    port = 3306,
    user = "admin",
    password = "********",
    database = "zerobase"
)

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

remote.close()
  • 결과 확인
mysql> desc sql_file;
ERROR 1146 (42S02): Table 'zerobase.sql_file' doesn't exist

☁️ Execute SQL File

  • test03.sql 생성
CREATE TABLE sql_file
(
    id int,
    filename varchar(16)
);
  • test03.sql 실행

remote = mysql.connector.connect(
    host = "myhostname",
    port = 3306,
    user = "admin",
    password  = "********",
    database = "zerobase"
)

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

remote.close()
  • 결과 확인
mysql> desc sql_file;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int         | YES  |     | NULL    |       |
| filename | varchar(16) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

☁️ Execute SQL File

  • test04.sql 생성
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");
  • 실행 (Multi = True)

remote = mysql.connector.connect(
    host = "myhostname",
    port = 3306,
    user = "admin",
    password  = "********",
    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()
  • 결과 확인
mysql> SELECT * FROM sql_file;
+------+------------+
| id   | filename   |
+------+------------+
|    1 | test01.sql |
|    2 | test02.sql |
|    3 | test03.sql |
|    4 | test04.sql |
+------+------------+
4 rows in set (0.01 sec)
profile
제로베이스 DA7 김예빈입니다.

0개의 댓글