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

Posted on
Python GAE

今回は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を運用したり(実際にやってる)他のことに利用できるかもしれません。