LoginSignup
4
3

More than 3 years have passed since last update.

ローカルのsqlite3から、herokuのpostgresqlにデータ移行(Amazon S3とか使わず)

Posted at

何の記事ですか

色んな意味で初心者の私がflask + sqlite3でwebアプリ作りたい!ってやってたら、
「えっ、herokuってsqlite使えないんですか・・・」と絶望したので、
sqliteからherokuのpostgresqlにデータを移行する手順を書いてみる。

既存でいっぱいあるけど、初心者には難しかったです。はい。
このやり方なら、たぶん誰でもできる。はず。

sqliteからCSVに書き出す

sqlite3で作成したhoge.dbを、hoge.csvに出力。

create_csv.py
import sqlite3
import pandas as pd

db = sqlite3.connect("hoge.db")  #「hoge」を変更 
df = pd.read_sql_query("SELECT*FROM table", db) #「table」を変更 
db.close()
df.to_csv("hoge.csv", index=None)

herokuで空のappとpostgresqlを作る。

空のapp作る → postgresql作るの順。
こちらの記事を参考にさせていただきました。

●Heroku初心者がHello, Herokuをしてみる
https://qiita.com/Arashi/items/b2f2e01259238235e187
●いちばん簡単にPostgreSQLを使う ~HerokuPosgresに繋いでみよう
https://qiita.com/rzl5/items/09f61d308080bf801a8b

herokuで空のテーブルを作る

herokuのpostgresql側で空のテーブルを作る。
コマンドラインとか使っちゃう。コマンドラインって「ぽい」ですよね。ふふふ。

heroku pg:psql -a [APP NAME]
[APP NAME]::DATABASE=> create [TABLE NAME] 
[APP NAME]::DATABASE-> (
[APP NAME]::DATABASE(> [COLMUN_NAME1] text,
[APP NAME]::DATABASE(> [COLMUN_NAME2] text,
[APP NAME]::DATABASE(> );

CSVを読み込む

こちらもコマンドラインで。「\copy」はメタコマンドというらしいです。

[APP NAME]::DATABASE=> \copy [TABLE NAME] from 'hoge.csv' CSV header;

できた!

ということで、この記事を書きながら、
「『コマンドライン』って使い方あってるかな・・・」
と調べるレベルの私でも、ローカルのsqlite3から、herokuのpostgresqlにデータ移行ができました。

herokuの公式ドキュメントだと、dumpファイルを作って、HTTPからアクセスできるところ(Amazon S3とかレンタルサーバーとか?)に置いたらできるよ、みたいな感じだったけど、Amazon S3に登録するのに若干の躊躇があり(たぶんまだ使いこなせない)、別のやり方を調べていたら2日くらいかけてしまった。

heroku schedulerとかで定期的にスクレイピングかけて、db保存したやつをなんやかんやするwebアプリを作りたいなぁ。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3