% mysql -h "엔드포인트" -P 포트 -u 마스터 사용자 이름 -p
source /path/filename.sql
\. /path/filename.sql # source 대신 \. 사용가능
\. filename.sql # 현재 폴더에 있으면 path 생략 가능
source test01.sql
% mysql -u username -p databasename < /path/filename.sql
% mysql -u root -p zerobase < test02.sql
% mysqldump -u username -p dbname > backup.sql # 특정 database backup
% mysqldump -u username -p --all-databases > backup.sql # 모든 Database backup
% mysqldump --set-gtid-purged=OFF -h 엔드포인트 -P 포트 -u username -p databasename filename.sql # AWS Database backup
# AWS RDS 서비스가 사용 가능한 상태에서 접속
% mysql -h 엔드포인트 -P 포트 -u 마스터 사용자 이름 -p
mysql> use dbname;
mysql> source filename.sql
% mysqldump -u username -p dbname tablename > backup.sql
% mysqldump -d -u username -p dbname tablename > backup.sql # 특정 table schema backup
% mysqldump -d -u username -p dbname > backup.sql # 모든 table schema backup
!pip install mysql-connector-python
import mysql.connector
#local
mydb = mysql.connector.connect(
host ="hostname",
user="username",
password="password"
)
# AWS RDS
mydb = mysql.connector.connect(
host ="hostname",
port = port,
user="username",
password="password"
)
# close database
mydb.close()
#특정 database 접속 코드
mydb = mysql.connector.connect(
host ="hostname",
user="username",
password="password",
database="databasename"
)
import mysql.connector
mydb = mysql.connector.conncet(
host ="hostname",
user="username",
password="password",
database="databasename"
)
mycursor = mydb.cursor()
mycursor.execute(<query>)
cursor = mydb.cursor()
cursor.execute("CREATE TABLE sql_file (id int, filename varchar(16))")
mydb.close()
cursor = mydb.cursor()
cursor.execute("DROP TABLE sql_file")
mydb.close()
# test.sql
CREATE TABLE sql_file(
id int,
filename varchar(16)
);
# python
mycursor = mydb.cursor()
sql = open("<filename>.sql").read()
mycursor.execute(sql)
cur = mydb.cursor()
sql = open("test.sql").read()
cur.execute(sql)
mydb.close()
# test02.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");
# python
mycursor = mydb.cursor()
sql = open("test02.sql").read()
mycursor.execute(sql, multi=True)
mydb.commit()
mydb.close()
mycursor.execute(<query>)
result = mycursor.fetchall()
for data in result:
print(data)
-----------------------------------------------------
cur = mydb.cursor(buffered=True)
sql = open("test02.sql").read()
result = cur.execute(sql, multi=True)
for result_iterator in result:
if result_iterator.with_rows:
print(result_iterator.fetchall())
else:
print(result_iterator.statement)
mydb.commit()
mydb.close()
# dataframe으로 읽기
import pandas as pd
df = pd.DataFrame(result)
df.head()
1) 제공받은 police_station.csv 를 Pandas 로 읽어와서 데이터를 확인
2) csv 한글이 깨지는 경우, encoding 값을 'euc-kr' 로 설정 (특히 우리나라 사이트에서 제공받은 csv 파일들.)
3) mysql 연결
4) Query 를 실행하기 위한 코드
5) CSV 에 있는 데이터를 Python 으로 INSERT
6) commit() 은 database 에 적용하기 위한 명령
7) 결과 확인
# 1, 2번
import pandas as pd
df = pd.read_csv("police_station.csv", encoding="euc-kr")
df.head()
# 3번
conn = mysql.connector.connect(
host="hostname",
port = port,
user ="username",
password = "password",
database = "databasename"
)
# 4번
cursor = conn.cursor(buffered=True)
sql = "INSERT INTO police_station VALUES (%s, %s)"
# 5번(for문에 commit()을 넣어주면 에러가 생겨도 그 전까지는 데이터가 넣어짐)
for i, row in df.iterrows():
cursor.execute(sql, tuple(row))
print(tuple(row))
conn.commit()
# 6번
cursor.execute("SELECT * FROM police_station")
result = cursor.fetchall()
for row in result:
print(row)
#추가 데이터프레임으로 확인
df = pd.DataFrame(result)
df.head()
conn.close()
Reference
1) 제로베이스 강의자료