VSCode 통해 실행, ds_study 환경에서 작업
모두 sql_ws폴더에서 시작
AWS RDS로 생성한 database_1을 모두 사용
AWS RDS zerobase의 police_station 테이블의 데이터를 모두 삭제
delete from police_station;
백업
_텍스트_zerobase로 이동
police_station 삭제
pip install mysql-connecter-python
import mysql.connecter
mydb = mysql.connecter.connect(
host = <"hostname">,
user = <"username">,
password = <"password">,
#port = <"port">, #원격
#database = <"database"> #db지정할 때
)
사용 끝날 땐 종료해줘야 함.
mydb.close()
remote = mysql.connecter.connect(
host = "database-1.ceyxjjsqhwcr.us-east-1.rds.amazonaws.com" ,
user = "admin",
password = <"password">,
port = 3306,
#database = "********"
)
사용 끝날 땐 종료해줘야 함.
remote.close()
예) local MySQL의 zerobase에 연결
import mysql.connector
mydb = mysql.connecter.connect(
host = "localhost",
user = "root",
password = "********",
database = "zerobase"
);
mydb.close()
예) local MySQL의 zerobase에 연결
remote = mysql.connecter.connect(
host = "database-1.ceyxjjsqhwcr.us-east-1.rds.amazonaws.com",
user = "admin",
password = "********",
port = 3306,
database = "zerobase"
);
remote.close()
mydb = mysql.connecter.connect(
host = <"hostname">,
user = <"username">,
password = <"password">,
database = <"database">
)
#커넥션 맺고
#커서 생성
mycursor = mydb.cursor()
#쿼리 실행
mycursor.execute(<query>);
예) 테이블 생성
remote = mysql.connecter.connect(
host = "database-1.ceyxjjsqhwcr.us-east-1.rds.amazonaws.com",
user = "admin",
password = "********",
port = 3306,
database = "zerobase"
)
cur = remote.cursor()
cur.exectue("CREATE TABLE sql_file (id int, filename varchar(16))")
remote.close()
---
결과확인
desc sql_file
-h -P -u -p
-h endpoint -P port -u 마스터 이름 -p 비밀번호
예) 테이블 삭제
remote = mysql.connecter.connect(
host = "database-1.ceyxjjsqhwcr.us-east-1.rds.amazonaws.com",
user = "admin",
password = "********",
port = 3306,
database = "zerobase"
)
cur = remote.cursor()
cur.exectue("DROP TABLE sql_file")
remote.close()
---
결과확인
desc sql_file
#커넥션 맺고
mydb = mysql.connecter.connect(
host = <"hostname">,
user = <"username">,
password = <"password">,
database = <"databaseㅜ믇">
)
#커서 생성
mycursor = mydb.cursor()
#쿼리 생성하는데, open함수 써서 sql파일 읽어오게 함
sql = open("<filename>.sql").read()
#커서 통해 sql실행하면 파일이 실행됨
mycursor.execute(sql);
예)
test03.sql
CREATE TABLE sql_file
(
id int,
filename varchar(16)
);
remote = mysql.connecter.connect(
host = "database-1.ceyxjjsqhwcr.us-east-1.rds.amazonaws.com",
user = "admin",
password = "********",
port = 3306,
database = "zerobase"
)
cur = remote.cursor()
sql = open("test03.sql").read()
cur.execute(sql)
remote.close()
---
결과확인
desc sql_file
#커넥션 맺고
mydb = mysql.connecter.connect(
host = <"hostname">,
user = <"username">,
password = <"password">,
database = <"databasename">
)
#커서 생성
mycursor = mydb.cursor()
#쿼리 생성하는데, open함수 써서 sql파일 읽어오게 함
sql = open("<filename>.sql").read()
#커서 통해 sql실행하면 파일이 실행되고, 조건 추가
result = mycursor.execute(sql, multi=True);
예)
test04.sql
INSERT INTO sql_file VALEUS (1, "test01.sql"
INSERT INTO sql_file VALEUS (2, "test02.sql"
INSERT INTO sql_file VALEUS (3, "test03.sql"
INSERT INTO sql_file VALEUS (4, "test04.sql"
remote = mysql.connecter.connect(
host = "database-1.ceyxjjsqhwcr.us-east-1.rds.amazonaws.com",
user = "admin",
password = "********",
port = 3306,
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)
# 아니면 statement로 찍음
remote.commit()
remote.close()
remote = mysql.connector.connect(
host = "database-1.ceyxjjsqhwcr.us-east-1.rds.amazonaws.com",
user = "admin",
port = 3306,
password = "prorege4344",
database='zerobase'
)
cur = remote.cursor(buffered=True)
cur.execute("SELECT * FROM sql_file")
result = cur.fetchall()
for result_iterater in result:
print(result_iterater)
remote.close()
예) 참고, 검색결과를 Pandas로 읽기
import pandas as pd
df = pd.DataFrame(result)
df.head()
큰 데이터들이 엑셀이나 csv에 들어있는 경우가 있음. mysql에서는 워크벤치나 명령어로 바로 넣을 수 있음. 코딩이 맞지 않을 땐 한꺼번에 안 들어감. 우리나라 사이트에서 다운받은 건 uft-8이 아니라서 더 fail이 자주남. 근데 파이썬으로 하면 금방 해결됨
import pandas as pd
df = pd.read_csv("police_station.csv")
df.head()
import mysql.connecter
conn = mysql.connecter.connect(
host = "database-1.ceyxjjsqhwcr.us-east-1.rds.amazonaws.com",
user = "admin",
password = "********",
port = 3306,
database = "zerobase"
)
읽어올 양이 많은 경우 cursor 생성시 buffer설정을 해준다
cursor = conn.cursor(buffered= True)
sql = "INSERT INTO police_station VALUES (%s, %s)"
한번 insert할 쿼리면 됨. for문 돌면서 반복시킬 것. 값에 대한 부분은 str으로 받을 수 있게 설정
commit()은 database 에 적용하기 위한 명령
# 판다스로 읽어온 데이터를 df에 담아뒀는데 한줄씩 가져옴
for i, row in df.iterrows():
#튜플 써서 sql에 값대입 - > 쿼리에 데이터가 들어가서 완성된 상태로 커서를 실행할 것
cursor.execute(sql, tuple(row))
# 값찍어보면 나옴
print(tuple(row))
# commit하는 순간 database에 적용됨.
# for문 돌다가 fail이 여섯번째때 나도 다섯번재까지는 db에 들어가 있음.
# 더 좋은 작업을 할 수 있게 도와줌
conn.commmit()
cursor.execute("SELECT * FROM police_station")
result = cursor.fetchall()
for row in result:
print(row)
df = pd.DataFrame(result)
df
import pandas as pd
df = pd.read_csv("2020_crime.csv", encoding="euc-kr")
df
import mysql.connecter
conn = mysql.connecter.connect(
host = "database-1.ceyxjjsqhwcr.us-east-1.rds.amazonaws.com",
user = "admin",
password = "********",
port = 3306,
database = "zerobase"
)
import pandas as pd
df = pd.read_csv("2020_crime.csv", encoding="euc-kr")
df
sql = """INSERT INTO crime_status VALUES ("2020", %s, %s, %s, %s)"""
cursor = conn.cursir(buffered=True)
for i, row in df.iterrows():
#튜플 써서 sql에 값대입 - > 쿼리에 데이터가 들어가서 완성된 상태로 커서를 실행할 것
cursor.execute(sql, tuple(row))
# 값찍어보면 나옴
print(tuple(row))
# commit하는 순간 database에 적용됨.
# for문 돌다가 fail이 여섯번째때 나도 다섯번재까지는 db에 들어가 있음.
# 더 좋은 작업을 할 수 있게 도와줌
conn.commmit()
cursor.execute("SELECT * FROM crime_status")
result = cursor.fetchall()
for row in result:
print(row)
df = pd.DataFrame(result)
df