mysql-installer-community-8.0.29.0.msi
pip install pymysql
pip install sqlalchemy
pip install openpyxl
pip install cryptography
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()