44.SQL-10

SOWA·2023년 4월 30일
0

SQL

목록 보기
10/12

🧷 Python with MySQL

Pyhton으로 MySQL 접속 후 사용하는 방법

  • Python에서 MySQL을 사용하기 위해서는 먼저 MySQL 드라이버를 설치
    pip install mysql-connector-python

  • MySQL에 접속하기 위한 코드
mydb = mysql.connector.connect(
    host = "<hostname>",
    user = "<username>",
    password = "<password>"
)

  • AWS RDS(database-1)연결
remote = mysql.connector.connect(
    host = "database-1~~~.amazonaws.com",
    port = 3306,
    user = "d~~~e",
    password = "*******"
)

  • 사용이 끝난 뒤에는 close
import mysql.connector

mydb = mysql.connector.connect(
    host = "<hostname>",
    user = "<username>",
    password = "<password>",
    database = "<databasename>"
)

mydb.close()

🖇️ 특정 데이터베이스에 접속

import mysql.connector

mydb = mysql.connector.connect(
    host = "<hostname>",
    port = <port>,
    user = "<username>",
    password = "<password>",
    database = "<databasename>"
)

ㄴ 특정 데이터 베이스에 접속하기 위한 코드


🖇️ 파이썬에서 SQL 쿼리 실행

import mysql.connector

mydb = mysql.connector.connect(
    host = "<hostname>",
    user = "<username>",
    password = "<password>",
    database = "<databasename>"
)

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

ㄴ 쿼리 실행


  • sql_file 테이블 생성
import mysql.connector

remote = mysql.connector.connect(
    host = "database-1~~~~~~~~~~~~~.amazonaws.com",
    port = 3306,
    user = "d~~~e",
    password = "*****",
    database = "zerobase"
)

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

remote.close()

mysql> desc sql_file;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int         | YES  |     | NULL    |       |
| filename | varchar(16) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+

  • 테이블 삭제
import mysql.connector

remote = mysql.connector.connect(
    host = "database-1.~~~~.amazonaws.com",
    port = 3306,
    user = "d~~~",
    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

🖇️ SQL 파일 실행

import mysql.connector

mydb = mysql.connector.connect(
    host = "<hostname>",
    user = "<username>",
    password = "<password>",
    database = "<databasename>"
)

mycursor = mydb.cursor()

sql = open("<filename>.sql").read()
mycursor.execute(sql)

  • test03.sql 파일 실행
import mysql.connector

remote = mysql.connector.connect(
    host = "database-1.~~~~.amazonaws.com",
    port = 3306,
    user = "d~~~",
    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    |       |
+----------+-------------+------+-----+---------+-------+

─ SQL 파일내에 쿼리가 여러개 존재하는 경우

import mysql.connector

mydb = mysql.connector.connect(
    host = "<hostname>",
    user = "<username>",
    password = "<password>",
    database = "<databasename>"
)

mycursor = mydb.cursor()

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


ㄴ test04.sql 생성


import mysql.connector

remote = mysql.connector.connect(
    host = "database-1.~~~~.amazonaws.com",
    port = 3306,
    user = "d~~~",
    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 |
+------+------------+

🖇️ Fetch all

  • 모든 데이터를 한번에 읽어들일때
mycursor.execute(<query>)

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

  • sql_file 조회(읽어올 데이터양이 많은 경우 buffered=True)
import mysql.connector

remote = mysql.connector.connect(
    host = "database-1.~~~~.amazonaws.com",
    port = 3306,
    user = "d~~~",
    password = "********",
    database = "zerobase"
)

cur = remote.cursor(buffered=True)
cur.execute("Select * from sql_file")

result = cur.fetchall()
for result_iterator in result:
    print(result_iterator)

remote.close()

(1, 'test01.sql')
(2, 'test02.sql')
(3, 'test03.sql')
(4, 'test04.sql')

🖇️ Python with CSV

CSV에 있는 데이터를 파이썬으로 INSERT

import pandas as pd

df = pd.read_csv("..\ds_study\data\police_station.csv")
df.head()


import mysql.connector

remote = mysql.connector.connect(
    host = "database-1.~~~~.amazonaws.com",
    port = 3306,
    user = "d~~~",
    password = "********",
    database = "zerobase"
)
cursor = conn.cursor(buffered=True)

sql = "INSERT INTO police_station VALUES (%s, %s)"

for i, row in df.iterrows():
    cursor.execute(sql, tuple(row))
    print(tuple(row))
    conn.commit()

cursor.execute("SELECT * FROM police_station")

result = cursor.fetchall()
for row in result:
    print(row)


conn.close()

('서울중부경찰서', '서울특별시 중구 수표로 27')
('서울종로경찰서', '서울특별시 종로구 율곡로 46')
('서울남대문경찰서', '서울특별시 중구 한강대로 410')
('서울서대문경찰서', '서울특별시 서대문구 통일로 113')
('서울혜화경찰서', '서울특별시 종로구 창경궁로 112-16')
('서울용산경찰서', '서울특별시 용산구 원효로89길 24')
('서울성북경찰서', '서울특별시 성북구 보문로 170')
('서울동대문경찰서', '서울특별시 동대문구 약령시로 21길 29')
('서울마포경찰서', '서울특별시 마포구 마포대로 183')
('서울영등포경찰서', '서울특별시 영등포구 국회대로 608')
('서울성동경찰서', '서울특별시 성동구 왕십리광장로 9')
('서울동작경찰서', '서울특별시 동작구 노량진로 148')
('서울광진경찰서', '서울특별시 광진구 광나루로 447 광진소방서 임시청사 (능동)')
('서울서부경찰서', '서울특별시 은평구 은평로9길 15')
('서울강북경찰서', '서울특별시 강북구 오패산로 406')
('서울금천경찰서', '서울특별시 관악구 남부순환로 1435')
('서울중랑경찰서', '서울특별시 중랑구 중랑역로 137')
('서울강남경찰서', '서울특별시 강남구 테헤란로 114길 11')
('서울관악경찰서', '서울특별시 관악구 관악로5길 33')
('서울강서경찰서', '서울특별시 양천구 화곡로 73')
('서울강동경찰서', '서울특별시 강동구 성내로 33')
('서울종암경찰서', '서울특별시 성북구 종암로 135')
('서울구로경찰서', '서울특별시 구로구 가마산로 235')
('서울서초경찰서', '서울특별시 서초구 반포대로 179')
('서울양천경찰서', '서울특별시 양천구 목동동로 99')
...
('서울방배경찰서', '서울특별시 서초구 방배천로 54')
('서울도봉경찰서', '서울특별시 도봉구 노해로 403')
('서울수서경찰서', '서울특별시 강남구 개포로 617')
('서울은평경찰서', '서울특별시 은평구 연서로 365')

import mysql.connector

remote = mysql.connector.connect(
    host = "database-1.~~~~.amazonaws.com",
    port = 3306,
    user = "d~~~",
    password = "********",
    database = "zerobase"
)
sql2 = "INSERT INTO crime_status VALUES ('2020', %s, %s, %s, %s)"

cursor = con2.cursor(buffered=True)

for i, row in df_cr.iterrows():
    cursor.execute(sql2, tuple(row))
    print(tuple(row))
    con2.commit()

cursor.execute("SELECT * From crime_status")

result2 = cursor.fetchall()
for row in result2:
    print(row)

con2.close()  

...
(2020, '수서', '절도', '발생', 1010)
(2020, '수서', '절도', '검거', 475)
(2020, '수서', '폭력', '발생', 1394)
(2020, '수서', '폭력', '검거', 1200)

from.제로베이스 데이터 취업스쿨 강의

0개의 댓글