๐Ÿ˜ข ์Šคํ„ฐ๋””๋…ธํŠธ(SQL 13)

zoeยท2023๋…„ 4์›” 20์ผ
0

์‹ค์Šตํ™˜๊ฒฝ ๋งŒ๋“ค๊ธฐ

  • VSCode ํ˜น์€ Web Browser ๋ฅผ ํ†ตํ•ด ์‹คํ–‰ํ•˜๊ณ , ds_study ํ™˜๊ฒฝ์—์„œ ์ž‘์—…
  • Jupyter notebook ๊ณผ mysql ์€ ๋ชจ๋‘ sql_ws ํด๋”์—์„œ ์‹œ์ž‘
  • aws ์ƒ์„ฑํ•ด๋‘” database ์—”๋“œ ํฌ์ธํŠธ ์ด์šฉ

  • sql_ws ํด๋” ํ•˜์œ„์—์„œ ์‹คํ–‰(ํ˜„์žฌ ํด๋”๋ฅผ VSCode๋กœ ์—ด๋ผ๋Š” ๋œป)
    cmd
cd Documents/ds_sql_ws
code .
  • plice_station ๋ฐฑ์—… ํŒŒ์ผ ์ƒ์„ฑ
    vscode
mysqldump --set-gtid-purged=OFF -h database-1.cuiypimjmxdl.us-east-2.rds.amazonaws.com -P 3306 admin -p zerobase police_station
  • aws database ์ ‘์†
mysql -h database-1.cuiypimjmxdl.us-east-2.rds.amazonaws.com -P 3306 -u admin 
-p
  • zerobase์˜ police_station ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ ์‚ญ์ œ
show databases;
use zerobase;
show tables;
delete from police_station;
select * from police_station;
  • python.ipython ์ƒ์„ฑ ํ›„ ds_study ์ปค๋„ ์„ ํƒ




Python with MySQL

  • Python ์œผ๋กœ MySQL ์ ‘์† ํ›„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
    - Python ์—์„œ MySQL ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € MySQL Driver ๋ฅผ ์„ค์น˜
    - ์„ค์น˜ ํ™•์ธ

python.ipython

!pip install mysql-connector-python
import mysql.connector
  • MySQL ์— ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ
import mysql.connector

mydb = myssql.connector.connect(
	host = "<hostname>"
    user = "<username>"
    password = "<password>"
)

  • ์˜ˆ์ œ1 (create connection) Local Database ์—ฐ๊ฒฐ
# local database ์—ฐ๊ฒฐ
local = mysql.connector.connect(
    host = "localhost",
    user = "root",
    password = "์„ค์ •ํ•œ ํŒจ์“ฐ์›Œ๋“œ"
)
  • ์˜ˆ์ œ2 (create connection) AWS RDS (database-1) ์—ฐ๊ฒฐ
# AWS RDS(database-1) database ์—ฐ๊ฒฐ
remote = mysql.connector.connect(
    host = "database-1.cuiypimjmxdl.us-east-2.rds.amazonaws.com",
    port = 3306,
    user = "admin",
    password = "์„ค์ •ํ•œ ํŒจ์“ฐ์›Œ๋“œ"
)




  • close database
local.close()

  • ์˜ˆ์ œ1 (create connection) Local Database ๋‹ซ๊ธฐ
# local database close
local.close()
  • ์˜ˆ์ œ2 (create connection) AWS RDS (database-1) Database ๋‹ซ๊ธฐ
# AWS RDS(database-1) database close
remote.close()




  • ํŠน์ • database์— ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ
import mysql.connector

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

  • ์˜ˆ์ œ1 (create connection) Local MySQL ์˜ zerobase ์—ฐ๊ฒฐ
local = mysql.connector.connect(
    host = 'localhost',
    user = 'root',
    password = "<password>",
    database = 'zerobase'
)
local.close()
  • ์˜ˆ์ œ2 (create connection) AWS RDS (database-1) ์˜ zerobase ์—ฐ๊ฒฐ
remote = mysql.connector.connect(
    host = 'database-1.cuiypimjmxdl.us-east-2.rds.amazonaws.com',
    port = 3306,
    user = 'admin',
    password = "<password>",
    database = 'zerobase'
)
remote.close()




  • Query๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ
import mysql.connector

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

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

- ์˜ˆ์ œ1 (excute sql) ํ…Œ์ด๋ธ” ์ƒ์„ฑ
remote = mysql.connector.connect(
    host = 'database-1.cuiypimjmxdl.us-east-2.rds.amazonaws.com',
    port = 3306,
    user = 'admin',
    password = "<password>",
    database = 'zerobase'
)

cur = remote.cursor()
cur.execute('create table sql_file (id int, filename varchar(16));')

remote.close()
mysql -h database-1.cuiypimjmxdl.us-east-2.rds.amazonaws.com -P 3306 -u admin 
-p
use zerobase; 
show tables;
desc sql_file;
  • ์˜ˆ์ œ2 (excute sql) ํ…Œ์ด๋ธ” ์‚ญ์ œ
remote = mysql.connector.connect(
    host = 'database-1.cuiypimjmxdl.us-east-2.rds.amazonaws.com',
    port = 3306,
    user = 'admin',
    password = "<password>",
    database = 'zerobase'
)

cur = remote.cursor()
cur.execute('drop table sql_file')

remote.close()




  • SQL File์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ
mydb = mysql.connector.connect(
	host = "<hostname>",
    user = "<username>",
    password = "<password>",
    database = "<databasename>"
)

mycursor = mydb.cursor()

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

  • ์˜ˆ์ œ1 (excute sql file) test03.sql ์ƒ์„ฑ ๋ฐ ์‹คํ–‰
remote = mysql.connector.connect(
    host = 'database-1.cuiypimjmxdl.us-east-2.rds.amazonaws.com',
    port = 3306,
    user = 'admin',
    password = "<password>",
    database = 'zerobase'
)

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

remote.close()
show tables;
desc sql_file;




  • SQL File๋‚ด์— Query๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ
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)

  • ์˜ˆ์ œ1 (excute sql file) test04.sql ์ƒ์„ฑ
  • ์˜ˆ์ œ1 (excute sql file) test04.sql ์‹คํ–‰
remote = mysql.connector.connect(
    host = 'database-1.cuiypimjmxdl.us-east-2.rds.amazonaws.com',
    port = 3306,
    user = 'admin',
    password = "<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()
select * from sql_file;




  • Fetch All : ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€์ˆ˜์— ๋‹ด๊ธฐ ๊ฐ€๋Šฅ, for๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•˜๋‚˜์”ฉ ๋‚˜์˜ค๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ํ•œ๋ฒˆ์— ์ถœ๋ ฅ
    - ์ฝ์–ด์˜ฌ ๋ฐ์ดํ„ฐ ์–‘์ด ๋งŽ์€ ๊ฒฝ์šฐ buffered=True
mycursor.execute(<query>)
result = mycursor.fetchall()
for data in result:
	print(data

  • ์˜ˆ์ œ1 (fetch all) sql_file ํ…Œ์ด๋ธ” ์กฐํšŒ (์ฝ์–ด์˜ฌ ๋ฐ์ดํ„ฐ ์–‘์ด ๋งŽ์€ ๊ฒฝ์šฐ buffered=True)
  • ๊ฒ€์ƒ‰๊ฒฐ๊ณผ๋ฅผ Pandas ๋กœ ์ฝ๊ธฐ
import mysql.connector
remote = mysql.connector.connect(
    host = 'database-1.cuiypimjmxdl.us-east-2.rds.amazonaws.com',
    port = 3306,
    user = 'admin',
    password = "<password>",
    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)
remote.close()
import pandas as pd
df = pd.DataFrame(result)
df.head()




Python with CSV

  • csv ํ•œ๊ธ€์ด ๊นจ์ง€๋Š” ๊ฒฝ์šฐ, encoding ๊ฐ’์„ 'euc-kr' ๋กœ ์„ค์ • (ํŠนํžˆ ์šฐ๋ฆฌ๋‚˜๋ผ ์‚ฌ์ดํŠธ์—์„œ ์ œ๊ณต๋ฐ›์€ csv ํŒŒ์ผ๋“ค.
  • commit() : database ์— ์ ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ช…๋ น


  • CSV ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ Python ์œผ๋กœ INSERT
import pandas as pd
df = pd.read_csv('police_station.csv')
df.tail()
  • ์ œ๊ณต๋ฐ›์€ police_station.csv ๋ฅผ Pandas ๋กœ ์ฝ์–ด์™€์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธ
import mysql.connector

conn = mysql.connector.connect(
    host = 'database-1.cuiypimjmxdl.us-east-2.rds.amazonaws.com',
    port = 3306,
    user = 'zero',
    password = "<password>", # db๋ช…๊ณผ ๋™์ผ
    database = 'zerobase'
)
  • ์ฝ์–ด์˜ฌ ์–‘์ด ๋งŽ์€ ๊ฒฝ์šฐ cursor ์ƒ์„ฑ ์‹œ buffer ์„ค์ •
cursor = conn.cursor(buffered=True)
  • insert๋ฌธ ๋งŒ๋“ค๊ธฐ
sql = 'insert into police_station values (%s, %s)'
  • commit() ์€ database ์— ์ ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ช…๋ น
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()
result
for row in result:
    print(row)
  • ๊ฒ€์ƒ‰๊ฒฐ๊ณผ๋ฅผ Pandas ๋กœ ์ฝ๊ธฐ
df = pd.DataFrame(result)
df

  • ์˜ˆ์ œ1 1. crime_status ํ…Œ์ด๋ธ”์— 2020_crime.csv ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ
# crime_status ํ…Œ์ด๋ธ”์— 2020_crime.csv ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๋Š” ์ฝ”๋“œ ์ž‘์„ฑ
import mysql.connector

conn = mysql.connector.connect(
    host = 'database-1.cuiypimjmxdl.us-east-2.rds.amazonaws.com',
    port = 3306,
    user = 'zero',
    password = "<password>", # db๋ช…๊ณผ ๋™์ผ
    database = 'zerobase'
)
# 2020_crime.csv(encoding = 'euc-kr) ๋ฐ์ดํ„ฐ ์ฝ์–ด์˜ค๊ธฐ
import pandas as pd

df = pd.read_csv('2020_crime.csv', encoding='euc-kr')
df.head(2)
# insert ์ฟผ๋ฆฌ ์ž‘์„ฑ
sql = 'insert into crime_status values ("2020", %s, %s, %s, %s)'
cursor = conn.cursor(buffered=True)
# ๋ฐ์ดํ„ฐ๋ฅผ crime_status ํ…Œ์ด๋ธ”์— insert
for i, row in df.iterrows():
    cursor.execute(sql, tuple(row))
    print(tuple(row))
    conn.commit()
df.tail()
# crime_status ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ ์กฐํšŒ
cursor.execute('select * from crime_status')
result = cursor.fetchall()

for row in result:
    print(row)
# ์กฐํšŒํ•œ ๊ฒฐ๊ณผ๋ฅผ pandas๋กœ ๋ณ€ํ™˜ํ•ด์„œ ํ™•์ธ
df = pd.DataFrame(result)
df

๐Ÿ’ก ๋ฌธ์ œ 1. AWS RDS(database-1) zerobase ์— ์ ‘์†

import mysql.connector
conn = mysql.connector.connect(
    host = 'database-1.cuiypimjmxdl.us-east-2.rds.amazonaws.com',
    port = 3306,
    user = 'zero',
    password = 'zerobase',
    database = 'zerobase'
)

๐Ÿ’ก ๋ฌธ์ œ 2. cctv Table ์„ ์ƒ์„ฑ

sql = 'create table cctv (๊ธฐ๊ด€๋ช… varchar(8), ์†Œ๊ณ„ int, 2013๋…„๋„์ด์ „ int, 2014๋…„ int, 2015๋…„ int, 2016๋…„ int)'
cursor = conn.cursor(buffered=True)
cursor.execute(sql)

๐Ÿ’ก ๋ฌธ์ œ 3. cctv SQL ํŒŒ์ผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ Pandas ๋กœ ์ฝ๊ธฐ

import pandas as pd

df = pd.read_csv('Seoul_CCTV.csv', encoding='utf-8')
df.head()

๐Ÿ’ก ๋ฌธ์ œ 4. ๋ฐ์ดํ„ฐ๋ฅผ cctv ํ…Œ์ด๋ธ”์— INSERT

sql = 'insert into cctv values (%s, %s, %s, %s, %s, %s)'
cursor = conn.cursor(buffered=True)

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

๐Ÿ’ก ๋ฌธ์ œ 5. cctv ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ ์กฐํšŒํ•˜์—ฌ ํ™•์ธ

cursor.execute('select * from cctv')
result = cursor.fetchall()

for row in result:
    print(row)

๐Ÿ’ก ๋ฌธ์ œ 6. ์กฐํšŒ๋œ ๋ฐ์ดํ„ฐ๋ฅผ Pandas ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ถœ๋ ฅ

df = pd.DataFrame(result)
df

์–ด๋ ต๋‹ค...์ƒ์†Œํ•˜๋‹ค..

๐Ÿ’ป ์ถœ์ฒ˜ : ์ œ๋กœ๋ฒ ์ด์Šค ๋ฐ์ดํ„ฐ ์ทจ์—… ์Šค์ฟจ

profile
#๋ฐ์ดํ„ฐ๋ถ„์„ #ํผํฌ๋จผ์Šค๋งˆ์ผ€ํŒ… #๋ฐ์ดํ„ฐ #๋””์ง€ํ„ธ๋งˆ์ผ€ํŒ…

0๊ฐœ์˜ ๋Œ“๊ธ€