Jupyter Notebook 실행
(아래는 백업)
- aws 접속
mysql -h "database-1.c46uo9qzntem.ap-southeast-2.rds.amazonaws.com" -P 3306 -u admin -p- show databases;
- use zerobase;
- show tables;
- delete from police_station;
- show tables;
# cmd 에서 conda activate ds_study 를 먼저 한다 pip install mysql-connector-python
import mysql.connector
mydb = mysql.connector.connect( host = "<hostname>", user = "<username>", password = "<password>" )
# Local Database 의 zerobase 연결 local = mysql.connector.connect( host = "localhost", user = "root", password = "******" # mysql root 패스워드 )
# AWS RDS (database-1) 연결 remote =mysql.connector.connect( host = "엔드포인트 코드", port = 3306, user = "admin", password = "*************" # AWS RDS 패스워드 )
import mysql.connector local = mysql.connector.connect( host = "<hostname>", user = "<username>", password = "<password>", database = "<databasename>" ) local.close() # mydb.close() 는 오타이다.
local.close() # 로컬 연결 종료
remote.close() # 원격 연결 종료
import mysql.connector mydb = mysql.connector.connect( host = "<hostname>", port = <port>, user = "<username>", password = "<password>", database = "<databasename>" )
# Local Database 의 zerobase 연결 local = mysql.connector.connect( host = "localhost", user = "root", password = "*******", # mysql root 패스워드 database = 'zerobase' )
# AWS RDS (database-1) 연결 remote =mysql.connector.connect( host = "database-1.c46uo9qzntem.ap-southeast-2.rds.amazonaws.com", port = 3306, user = "admin", password = "****", # AWS RDS 패스워드 database = "zerobase" )
import mysql.connector mydb = mysql.connector.connect( host = "<hostname>", user = "<username>", password = "<password>", database = "<databasename>" ) mycursor = mydb.cursor() # cursor() 생성 mycursor.execute(<query>); # cursor() 를 실행함으로써 쿼리 실행
# AWS RDS (database-1) 연결 remote =mysql.connector.connect( host = "database-1.c46uo9qzntem.ap-southeast-2.rds.amazonaws.com", port = 3306, user = "admin", password = "******", # AWS RDS 패스워드 database = "zerobase" ) # 테이블 생성 cur = remote.cursor() cur.execute("CREATE TABLE sql_file (id int, filename varchar(16))") # 닫기 remote.close()
# AWS RDS (database-1) 연결 remote =mysql.connector.connect( host = "database-1.c46uo9qzntem.ap-southeast-2.rds.amazonaws.com", port = 3306, user = "admin", password = "*******", # AWS RDS 패스워드 database = "zerobase" ) # 테이블 삭제 cur = remote.cursor() cur.execute("DROP TABLE sql_file") # 닫기 remote.close()
mydb = mysql.connector.connect( host = "<hostname>", user = "<username>", password = "<password>", database = "<databasename>" ) mycursor = mydb.cursor() sql = open("<filename>.sql").read() mycursor.execute(sql);
CREATE TABLE sql_file ( id int, filename varchar(16) );
# test03.sql 실행 # AWS RDS (database-1) 연결 remote =mysql.connector.connect( host = "database-1.c46uo9qzntem.ap-southeast-2.rds.amazonaws.com", port = 3306, user = "admin", password = "*******", # AWS RDS 패스워드 database = "zerobase" ) # test03.sql 실행 cur = remote.cursor() sql = open("test03.sql").read() # 다른 경로에 있다면 경로를 지정해줘야 함 cur.execute(sql) # 닫기 remote.close()
mydb = mysql.connector.connect( host = "<hostname>", user = "<username>", password = "<password>", database = "<databasename>" ) mycursor = mydb.cursor() sql = open("<filename>.sql").read() mycursor.execute(sql, multi=True);
# SQL File 내에 Query 가 여러개 존재하는 경우 # AWS RDS (database-1) 연결 remote =mysql.connector.connect( host = "database-1.c46uo9qzntem.ap-southeast-2.rds.amazonaws.com", port = 3306, user = "admin", password = "*********", # AWS RDS 패스워드 database = "zerobase" ) # test03.sql 실행 cur = remote.cursor() sql = open("test04.sql").read() # 다른 경로에 있다면 경로를 지정해줘야 함 # cur.execute(sql, multi=True) # 이렇게만 해줘도 됨 # 아래는 값을 보기위해서 for문을 넣음, 위처럼 한줄로 해도 됨 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()
쿼리를 실행한 다음에 그 결과값이 row를 포함하고 있으면 Fetch All
실행하는 쿼리가 아니라 조회하는 select 문을 실행한 경우에는 데이터를 가지고 오는데, 데이터가 있는 경우에는 그 데이터를 Fetch All을 써서 변수에 담을 수 있다
변수를 담은 데이터를 바로 출력하면 한번에 출력되고, for 문을 쓰면 row마다 출력된다
mycursor.execute(<query>) result = mycursor.fetchall() for data in result: print(datd)
# sql_file 테이블 조회 # AWS RDS (database-1) 연결 remote =mysql.connector.connect( host = "database-1.c46uo9qzntem.ap-southeast-2.rds.amazonaws.com", port = 3306, user = "admin", password = "*********", # AWS RDS 패스워드 database = "zerobase" ) cur = remote.cursor(buffered=True) cur.execute("SELECT * FROM sql_file") result = cur.fetchall() result >> [(1, 'test01.sql'), (2, 'test02.sql'), (3, 'test03.sql'), (4, 'test04.sql')]
# 위 코드에 for 문 추가 # sql_file 테이블 조회 # AWS RDS (database-1) 연결 remote =mysql.connector.connect( host = "database-1.c46uo9qzntem.ap-southeast-2.rds.amazonaws.com", port = 3306, user = "admin", password = "********", # AWS RDS 패스워드 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')
https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-execute.html
튜플로 감싸줌
# 문제 1. AWS RDS(database-1) zerobase 에 접속합니다.
import mysql.connector
conn = mysql.connector.connect(
host = "database-1.c46uo9qzntem.ap-southeast-2.rds.amazonaws.com",
port = 3306,
user = "zero",
password = "zerobase", # AWS RDS 패스워드
database = "zerobase"
)
# 문제 2. cctv Table 을 생성합니다.
# 아래가 문제 3. 풀이
# 문제 3. cctv SQL 파일에서 데이터를 Pandas 로 읽어옵니다.
import pandas as pd
df = pd.read_csv('Seoul_CCTV.csv', encoding='utf-8')
df.head()
# 아래가 문제 2. 풀이
# 쿼리 작성
sql = "create table cctv (기관명 varchar(8), 소계 int, 2013년도이전 int, 2014년 int, 2015년 int, 2016년 int)"
cursor = conn.cursor(buffered=True)
cursor.execute(sql)
# 문제 4. 데이터를 cctv 테이블에 INSERT 합니다.
# 쿼리 작성
sql = """insert into cctv values (%s, %s, %s, %s, %s, %s)"""
cursor = conn.cursor(buffered=True)
# 데이터를 cctv 테이블에 INSERT
for i, row in df.iterrows():
cursor.execute(sql, tuple(row))
print(tuple(row))
conn.commit()
>>
('강남구', 3238, 1292, 430, 584, 932)
('강동구', 1010, 379, 99, 155, 377)
('강북구', 831, 369, 120, 138, 204)
('강서구', 911, 388, 258, 184, 81)
('관악구', 2109, 846, 260, 390, 613)
('광진구', 878, 573, 78, 53, 174)
('구로구', 1884, 1142, 173, 246, 323)
('금천구', 1348, 674, 51, 269, 354)
('노원구', 1566, 542, 57, 451, 516)
('도봉구', 825, 238, 159, 42, 386)
('동대문구', 1870, 1070, 23, 198, 579)
('동작구', 1302, 544, 341, 103, 314)
('마포구', 980, 314, 118, 169, 379)
('서대문구', 1254, 844, 50, 68, 292)
('서초구', 2297, 1406, 157, 336, 398)
('성동구', 1327, 730, 91, 241, 265)
('성북구', 1651, 1009, 78, 360, 204)
('송파구', 1081, 529, 21, 68, 463)
('양천구', 2482, 1843, 142, 30, 467)
('영등포구', 1277, 495, 214, 195, 373)
('용산구', 2096, 1368, 218, 112, 398)
('은평구', 2108, 1138, 224, 278, 468)
('종로구', 1619, 464, 314, 211, 630)
('중구', 1023, 413, 190, 72, 348)
('중랑구', 916, 509, 121, 177, 109)
# 문제 5. cctv 테이블의 데이터 조회하여 확인합니다.
cursor.execute("select * from cctv")
result = cursor.fetchall()
for row in result:
print(row)
>>
('강남구', 3238, 1292, 430, 584, 932)
('강동구', 1010, 379, 99, 155, 377)
('강북구', 831, 369, 120, 138, 204)
('강서구', 911, 388, 258, 184, 81)
('관악구', 2109, 846, 260, 390, 613)
('광진구', 878, 573, 78, 53, 174)
('구로구', 1884, 1142, 173, 246, 323)
('금천구', 1348, 674, 51, 269, 354)
('노원구', 1566, 542, 57, 451, 516)
('도봉구', 825, 238, 159, 42, 386)
('동대문구', 1870, 1070, 23, 198, 579)
('동작구', 1302, 544, 341, 103, 314)
('마포구', 980, 314, 118, 169, 379)
('서대문구', 1254, 844, 50, 68, 292)
('서초구', 2297, 1406, 157, 336, 398)
('성동구', 1327, 730, 91, 241, 265)
('성북구', 1651, 1009, 78, 360, 204)
('송파구', 1081, 529, 21, 68, 463)
('양천구', 2482, 1843, 142, 30, 467)
('영등포구', 1277, 495, 214, 195, 373)
('용산구', 2096, 1368, 218, 112, 398)
('은평구', 2108, 1138, 224, 278, 468)
('종로구', 1619, 464, 314, 211, 630)
('중구', 1023, 413, 190, 72, 348)
('중랑구', 916, 509, 121, 177, 109)
df = pd.DataFrame(result)
df.tail()
위 글은 제로베이스 데이터 취업 스쿨의 강의자료를 참고하여 작성되었습니다.