상윤님의 코드를 바탕으로 작성되었습니다.

1. 아래에 있는 파일을 설치

mysql-installer-community-8.0.29.0.msi

Untitled

2. 필요한 모듈 설치

pip install pymysql
pip install sqlalchemy
pip install openpyxl
pip install cryptography

3. Python 코드 작성

import pandas as pd
import numpy as np
from sqlalchemy import create_engine
import pymysql
import base64
# sqlalchemy는 python에서 사용하는 orm(sql없이 db를 쉽게 쓰게 해주는) 모듈입니다
# base64는 np array(float32)->byte string으로 변환하면
# 데이터베이스에 text 타입으로 저장할수 없는 문자가 포함됩니다(ascii의 범위를 벗어남)
# 따라서 base64로 인코딩을 해서 저장할 수 있는 형태로 바꿔줍니다. 

# db에 커넥션 생성
conn = pymysql.connect(
    user='root', 
    passwd='0000', 
    host='localhost', 
    db='pills', 
    charset='utf8'
)

#엑셀 파일 읽기
df = pd.read_excel('pill_info.xls')
# 실제로는 model로 feature를 추출한 뒤에 저장해야 하지만 임시로 random array를 사용해봅시다.
# tobytes로 바이트 스트링으로 바꾸고 str.decode로 스트링으로 변경 base64로 저장가능한 텍스트로 변경

random_features = [base64.b64encode(np.random.rand(1024).tobytes()).decode('utf-8') for i in range(24345)]
add_srs = pd.Series([base64.b64encode(np.random.rand(1024).tobytes()).decode('utf-8') for i in range(24345)], index=[i for i in range(24345)])
add_srs = pd.Series(random_features, index=[i for i in range(24345)])
#feature 값을 데이터프레임에 column으로 추가해줍니다.
df["feature"] = add_srs

#sql_alchemy와 pandas를 이용한 데이터베이스에 추가
db_connection_str = 'mysql+pymysql://root:[email protected]/pills'
db_connection = create_engine(db_connection_str)
df.to_sql(name='pills_table', con=db_connection, if_exists='append',index=False)

#sql로 색상이 연두와 원형인 것들을 가져온 결과
cursor = conn.cursor()

sql = '''
SELECT  feature
from pills_table
where 색상앞 = '연두' 
and 의약품제형 = '원형'
'''

cursor.execute(sql) 
res = cursor.fetchall() 

for data in res[:5]:
    print(np.frombuffer(base64.b64decode(data[0].encode('utf-8')), dtype=np.float64))

conn.commit() 
conn.close()

3. CSV를 MySQL에 저장

Untitled

Untitled

4. 실행 결과

Untitled