TIP! 한글 인코딩 오류시
mysql -h "엔드포인트" -P 3306 -u admin -p --default-character-set utf8mb4
: 파이썬으로 mysql접속 쿼리실행 조회 pandas변환 출력
import mysql.connector
mydb = mysql.connector.connect(
host= , #'localhost', '엔드포인트'
user= , #'root', 'admin'
password= ,
databses= ,
#AWS RDS와 같이 외부DB
port= # 3306
)
mydb.close()
(예: table생성, 삭제)
TIP! SQL 쿼리에서 컬럼 이름이나 테이블 이름을 감싸는 따옴표('') 대신 역따옴표(``)를 사용해야 함 -> 다만, 쿼리문 조회할때도 역따옴표로 해야함
cur = remote.cursor()
cur.execute("CREATE TABLE 테이블명 (컬럼들)")
cur.execute("DROP TABLE 테이블명")
# 쿼리 실행이 하나일 경우
cur = mydb.cursor()
sql = open('파일명.sql').read() # 경로가 다른데 있다면 ('./파일명.sql')
cur.execute(sql)
# 파일 내 쿼리가 여러 개 multi=True
# 쿼리 실행시 데이터베이스에 바로 적용X commit()하는 순간 적용됨
cur = mydb.cursor()
sql = open("파일명.sql").read()
for result_iterator in cur.execute(sql, multi=True): # 확인차
if result_iterator.with_rows: # 결과값이 row를 포함하고 있으면 fatchall
print(result_iterator.fetchall())
else:
print(result_iterator.statement)
remote.commit() # database에 적용하기 위한 명령어
Fetch All
'조회'하는 쿼리 실행시(예:select from) 데이터를 가져오기에 그 데이터를 fetchall로 가져와 변수에 담을수있음('실행'하는 쿼리가 아닌)
-> for문으로 한 줄씩 추출가능 -> pandas. DataFrame변환도 가능!!!!for result_iterator in result: print(result_iterator) df = pd.DataFrame(result) # 검색 결과를 Pandas 읽기
buffered = True 옵션 읽어올 데이터양이 많을 경우
: (큰용량의) excel, csv파일을 DB에 넣고 Query execute하고 싶을때?
mysql 인터페이스로 할 수 있지만 encoding이 문제!!
특히 우리나라 사이트 다운받은 파일들이 utf-8이 아닌 경우가 많아 파이썬로 이용!!
Tip!! csv 한글이 깨지는 경우, pd.read_csv에서 encoding 값을 'euc-kr' 로 설정(대부분 utf-8)
(특히 우리나라 사이트에서 제공받은 csv 파일들.)
import pandas as pd
df = pd.read_csv('파일.csv', encoding= )
# AWS RPS 데이터베이스와 연결
conn = mysql.connector.connect(host= ,.... )
# cursor 하기
cur = conn.cursor(buffered=True) #읽어올 양이 많을때
# insert문 만들기
sql = 'insert into 테이블명 values(%s, ,..)' # %s string값
# 데이터 입력
for i,row in df.iterrows():
cur.execute(sql, tuple(row))
print(tuple(row)) # 각 내용들이 튜플 형태로 ( , )
conn.commit()
cur.execute("select * from 테이블명")
result = cur.fetchall()
result #[( ),( ),,,]형태 -> for문으로 하나씩 볼 수 있음
df = pd.DataFrame(result)
df