on
플라스크 기반 csv파일을 몽고db에 일괄 업로드
플라스크 기반 csv파일을 몽고db에 일괄 업로드
728x90
import json from flask import Flask, render_template, jsonify, request import pandas as pd from pymongo import MongoClient # 로컬 클라이언트, 로컬서버 몽고DB client = MongoClient('localhost', 27017) db = client.dbsparta # 로컬 클라이언트, 원격서버 몽고 DB #client = MongoClient('mongodb://webxxx:[email protected]', 27017) # db = client.remotesparta app = Flask(__name__) @app.route('/') def home(): return render_template('index.html') @app.route('/datacheck') def datacheck(): data_path = "static/data/테스트자료1.csv" print(data_path) df =pd.read_csv(data_path, encoding="CP949") json_str = df.to_json(orient="records") print(type(json_str)) json_data = json.loads(json_str) for jd in json_data: print(jd) db.csv_json.insert_one(jd) return render_template('datacheck.html', json_data=json_data) if __name__ == '__main__': app.run(host='0.0.0.0', port=5000, debug=True)
윈도우 환경에서 엑셀파일을 생성하고 이를 csv파일로 저장한 테스트자료1.csv 파일이 있다고 가정하고
이 파일을 몽고DB에 일괄로 저장하거나
웹페이지에 로드하여 자료 리스트화면을 만들거나 자료처리를 할 때 위의 구문을 활용하면 된다.
전체적인 순서는
일단 csv파일을 pd.read_csv("테스트자료1.csv ")로 불러온다. 그런데 일단 한글이 깨짐이 발생할 수 있기 때문에
pd.read_csv("테스트자료1.csv ", encoding="CP949")로 불러온다.
다음으로 이렇게 불러온 파일은 판다스의 데이터프레임 형식이기때문에 json형식으로 변환해야 몽고DB에 저장할 수 있다.
그래서 데이터프레임을 to_json(orient="records')로 json형식의 스트링(str) 문자로 변경한다.
스트링 타입의 json파일은 몽고DB나 웹페이지에 직접 호출, 전송할수 없기때문에
json.loads() 함수로 변환해줘야 한다.
그리고 맨 마지막으로 for구문을 이용하여 몽고DB에 업로드하면 된다.
728x90
반응형
from http://ecogis.tistory.com/160 by ccl(A) rewrite - 2021-08-24 23:25:59