99번째 줄:
99번째 줄:
|
|
|객체=커서객체.fetchone()
|객체=커서객체.fetchone()
+
|}
+
+
= 다양한 사용법 =
+
+
== 백업 ==
+
sql 자체에 백업기능이 있지만, 어째서인지, 행의 갯수도 달라지고, 용량도 달라진다. 반면 dataframe의 데이터를 직접 박아넣는 것은 행의 갯수도 크게 달라지지 않고(1,2개는 달라지는데, 이유를 모르겠다;), 용량도 오히려 많이 줄어든다.(아마 로그는 옮겨지지 않기 때문일듯..)
+
{| class="wikitable"
+
!과정
+
!설명
+
|-
+
|백업할 DB 연결
+
|<syntaxhighlight lang="python">
+
##### 백업할 DB 연결 및 테이블리스트 얻기.
+
import pymysql
+
from_db = pymysql.connect(host='연결할호스트', port=3306, db='coin_minute_info', user="유저", passwd='비밀번호', charset='utf8')
+
from_cur = from_db.cursor()
+
+
from_cur.execute('SHOW TABLES')
+
tables = from_cur.fetchall()
+
table_list = []
+
for i in tables:
+
table_list.append(i[0])
+
print('테이블리스트 생성 완료.')
+
</syntaxhighlight>
+
|-
+
|복원할 DB 연결 및 테이블 생성
+
|<syntaxhighlight lang="python">
+
to_db = from_db = pymysql.connect(host='localhost', port=3306, db='coin_minute_info', user="root", passwd='비밀번호', charset='utf8')
+
to_cur = to_db.cursor()
+
for i in table_list:
+
sql='CREATE TABLE IF NOT EXISTS {} (time DATETIME, start FLOAT, close FLOAT, \
+
high FLOAT, low FLOAT, volume FLOAT)'.format(i)
+
to_cur.execute(sql) # 테이블 따라서 생성.
+
to_db.commit() # 반영.
+
print('테이블 복사 완료')
+
</syntaxhighlight>
+
|-
+
|dataframe을 sql로 넣어주는 모듈 준비
+
|<syntaxhighlight lang="python">
+
from sqlalchemy import create_engine
+
engine = create_engine("mysql+pymysql://{user}:{pw}@{domain}/{db}"
+
.format(user="root", # sql 계정 입력.
+
domain='localhost', # 도메인 주소
+
pw="vudghk99", # sql 비밀번호 입력.
+
db="coin_minute_info")) # 연결할 db이름 입력.
+
</syntaxhighlight>
+
|-
+
|옮기기 실행
+
|<syntaxhighlight lang="python">
+
import pandas as pd
+
+
for i in table_list:
+
from_cur.execute('select * from {}'.format(i))
+
data = from_cur.fetchall()
+
data = pd.DataFrame(data)
+
data.rename(columns={0:'time', 1:'start', 2:'close', 3:'high', 4:'low', 5:'volume'}, inplace=True)
+
data.set_index('time', inplace=True)
+
print(data)
+
table_name = i
+
data.to_sql(table_name, con = engine, if_exists = 'append', chunksize = 1000)
+
</syntaxhighlight>
|}
|}