본문 바로가기

Language/Python

Python에서 sqllite3이용하기(json insert, select)

728x90

개요

데이터를 핸들링 하다보면 file한개가 사이즈가 큰 경우가 있습니다. 크다는 것은 기준이 다르겠지만 파이썬 pandas dataframe을 쓰려고 할때 파일 크기가 1기가만 되도 노트북 기준으로는 30초씩 걸릴때도 있습니다.

 

한번 실행 할 때마다 30초씩 걸리면 기다리다 시간이 다 가는 경우가 많습니다.

그래서 파일을 필요한 부분 만큼만 불러오고 싶은데 그냥 파일로 되어 있으면 검색이 잘 안되기 때문에 sqllite3를 사용하는 방법을 생각 해보았습니다.

 

아래 road_name.json은 931Mb짜리 도로명 주소 전체 데이터(전국) 중에 4개 field만 뽑아놓은 데이터입니다. 그래도 1기가 정도 됩니다. 이 파일을 매번 불러와서 df로 만들어 연산을 하려니 너무 느렸습니다.


Create DB, Table

import sqlite3 as db
import pandas as pd

df = pd.read_json('road_name.json')
con = db.connect('./road_name.db')

df.to_sql('t_road_name', con=con)

이 코드를 이용하면 t_road_name.db라는 파일을 만들고 거기에 t_road_name이라는 table을 만들어서 df에 있는 데이터를 넣어줍니다. create db, create table 이런 ddl을 안써도 데이터가 바로 들어갑니다.

Select

import sqlite3 as db
import pandas as pd

con = db.connect('./road_name.db')

query = 'select * from t_road_name limit 1000'
df = pd.read_sql(query, con = con)

print(df)

위와 같이 쓰면 test.db에 저장된 내용을 hello라는 table에서 select 1000개 하는 쿼리가 실행 됩니다. 여기에 where조건도 줄 수 있습니다.

Where

import sqlite3 as db
import pandas as pd
con = db.connect('./road_name.db')

query = 'select * from t_road_name where 시도 = "{}" limit 1000'.format('서울특별시')
df = pd.read_sql(query, con = con)

print(df)

column명을 한글로 했는데도 에러가 안나고 잘 되는 것을 볼 수 있습니다.

결과

728x90
블로그 주인장입니다. 원하시는 정보는 얻으셨나요? 이 포스트에서 추가로 필요한 정보가 있으시면 여기에 남겨주세요.