json -> sqlite3 으로 변환찾아 구만리...

BMO·2021년 8월 25일
0

이게 왜 안되지

목록 보기
7/9
post-custom-banner

django sqlite3
sqlite3

시작은 pandas.dataframe.to_sql로 날로먹으려고 했는데...

How to convert json to SQL format in Python
데이터프레임을 객체 SQLite3 DB에 저장하기

python manage.py shell

from Playlist.models import Song
Song.objects.all() -> 빈상태

import pandas pas pd
import json

with open("Playlist/datafiles/노래_데이터.py") as f:
	data = json.load(f)

df = pd.DataFrame(data)

import sqlite3
conn = sqlite3.connect('data.db')
cur = conn.cursor()

df.to_sql("Songs", conn)

😱 InterfaceError: Error binding parameter 1 - probably unsupported type.

? 테이블을 만들어야 하나? (아님)

cur.executescript("""
    ...: create table song_data(
    ...:     song_gn_dtl_gnr_basket,
    ...:     issue_date,
    ...:     album_name,
    ...:     album_id,
    ...:     artist_id_basket,
    ...:     song_name,
    ...:     songs_gn_gnr_basket,
    ...:     artist_name_basket,
    ...:     id
    ...:     );""")

? chunksize가 너무 작았나? (아님)

범인은 바로 다른 데이터타입!

df.info로 확인하면 대부분 속성의 데이터타입이 object이다. object타입은 sql의 도메인에 부적합하다.

데이터프레임의 속성 데이터타입을 바꾸고 싶어요!

https://stackoverflow.com/questions/15891038/change-column-type-in-pandas
df[컬럼].astype(타입)

df['song_gn_dtl_gnr_basket'] = df['song_gn_dtl_gnr_basket'].astype('string')
df['issue_date'] = df['issue_date'].astype('string')
df['album_name'] = df['album_name'].astype('string')
df['artist_id_basket'] = df['artist_id_basket'].astype('string')
df['song_name'] = df['song_name'].astype('string')
df['song_gn_gnr_basket'] = df['song_gn_gnr_basket'].astype('string')
df['artist_name_basket'] = df['artist_name_basket'].astype('string')

걸리는 데이터 타입 다 바꿔주고 to_sql

df.to_sql("song_meta", conn)

확인

for row in cur.execute('select * from song_meta limit 5'):
	print(row)


정말,,,기쁘다,,,
SQL은 아름답다🥳

profile
건강한 개발자가 되기 위해서 노력중...
post-custom-banner

0개의 댓글