[PYTHON] 파이썬으로 json, xml 파일 sql 형태로 저장하기

2023. 10. 4. 17:47DATA PROGRAMMING/PYTHON

 

1. json 파일 저장하기

import json
import sqlite3

우선 json 파일과 sql을 다루기 위한 라이브러리를 불러온다.

 

con = sqlite3.connect("./test.db")
cur = con.cursor()
cur.execute("CREATE TABLE IF NOT EXISTS "
            "carjson(no INTEGER PRIMARY KEY, NAME TEXT, PRICE INTEGER, YEAR INTEGER)")

no를 PK로 하고, NAME, PRICE, YEAR를 컬럼으로 갖는 carjson이라는 테이블을 만들어 준다.

 

with open("C:/Users/user/Downloads/5주차실습/data/car.json", 'r') as json_file:
    json_data = json.load(json_file)

제이슨 파일을 불러온다.

print(json_data)

json 데이터의 형태를 확인한다. PK 컬럼에 1, 2, 3, 4인 인덱스가 들어가므로 enumerate함수를 사용한다.

 

data_to_insert = []
for idx, (name, details) in enumerate(json_data.items(), start=1):
    price = int(details['price'])
    year = int(details['year']) if isinstance(details['year'], (int, str)) else details['year']
    data_to_insert.append((idx, name, price, year))

딕셔너리 형태로 저장된 json 파일을 name(key)과 details(values)로 분리하준다. 그리고 필요한 값들을 리스트에 저장해 준다.

 

for idx,name,price,year in data_to_insert:
    cur.execute("INSERT INTO carjson VALUES(?,?,?,?)", (idx,name,price,year))

 이 리스트의 값들을 sql문으로 저장하면 된다.

 

cur.execute("SELECT * FROM carjson")
print(cur.fetchall())
cur.close()
con.commit()
con.close()

SELECT*FROM carjson을 통해 carjson 테이블의 모든 값들을 출력한다.

 

 

2. xml 파일 저장하기

 

import xml.etree.ElementTree as ET

xml 데이터를 다루기 위해 xml.etree.ElemenTree를 불러온다.

 

con = sqlite3.connect("./test.db")
cur = con.cursor()

cur.execute("CREATE TABLE IF NOT EXISTS "
            "carxml(no INTEGER PRIMARY KEY, NAME TEXT, PRICE INTEGER, YEAR INTEGER)")

carxml 테이블을 만들어 준다.

 

 

xml_data = ET.parse("C:/Users/user/Downloads/5주차실습/data/car.xml")
root = xml_data.getroot()

cool_list = []
for i,car_name in enumerate(root.findall('carName'), start = 1):
    name = car_name.attrib["name"]
    price = int(car_name.find('price').text)
    year = int(car_name.find('year').text)
    cool_list.append((i,name,price,year))

xml 파일을 불러오고 각 값들을 테이블 정의에 맞게 형변환 해주고 cool_list에 저장한다.

 

for idx,name,price,year in cool_list:
    cur.execute("INSERT INTO carxml VALUES(?,?,?,?)", (idx,name,price,year))

json에서와 마찬가지로 만들어 낸 리스트를 테이블 형태로 만든다.

 

cur.execute("SELECT * FROM carxml")
print(cur.fetchall())

cur.close()
con.commit()
con.close()

json 데이터를 다뤘던 것과 마찬가지로 테이블이 잘 만들어졌는지 확인한다.