Aimless Blog

GCPのデータストアにcsvのデータを一括で登録する2

Tag:
pythongae

今回はGoogle Cloud Platform (GCP)のデータストアにbulkloaderを使わずにGoogle App Engine(GAE)経由でcsvファイルを一括でアップロードします。 言語はPython。フレームワークはFlaskを使用。

bulkloaderを使う方法はこちら→GCPのデータストアにcsvのデータを一括で登録する

app.yaml


app.yamlに以下を記述

- url: / #今回はcsvファイルをルートディレクトリに置く
  static_files: up.csv #データストアに登録するcsvファイル
  upload: up.csv #データストアに登録するcsvファイル
  mime_type: text/csv #必要ないかも
  application_readable: true

application_readable: trueとすることで静的ファイルを直接読み込むことが出来るので、ファイルを読み込むページを直接作っちゃおうというのが今回のやり方。

アプリケーションの作成


Kind名はtest プロパティはalpha,bravo,charlie,deltaの4つでいずれもstring

#!  /usr/bin/env python
#-*- coding: utf-8-*- 
from flask import Flask, request, redirect, url_for, render_template, g
from google.appengine.ext import ndb
import csv

app = Flask(__name__)

class test(ndb.Model):
	alpha = ndb.StringProperty()
	bravo = ndb.StringProperty()
	charlie = ndb.StringProperty()
	delta = ndb.StringProperty()
	
@app.route('/')
def index():
	return render_template('index.html')


@app.route('/upload')
def csvup():
	with open('./up.csv') as f:
		readcsv = csv.reader(f)
		for row in readcsv:
			alpha, bravo, charlie, delta = row
			c = test(alpha=alpha, bravo=bravo, charlie=charlie,delta=delta)
			c.put()
	return redirect(url_for('index'))

これでデータストアに登録できます。

しかし、このやり方だと誤って/uploadにアクセスしたりすると再度データストアに登録してしまうので注意。
application_readable: trueを使うと、csvファイルを読み込んでtableに出力するとか、テキストファイルからランダムに一つ読み込んでtwitterbotを運用したり(実際にやってる)他のことに利用できるかもしれません。