herokuでPostgreSQLを使うのが意外と面倒だったので、残しておきます。
アドオンの追加
$ heroku addons:create heroku-postgresql:hobby-dev
このとき、出力されるCreated postgresql-[文字列]-[数字] as DATABASE_URLのpostgresql-[文字列]-[数字]を用いて以下のコマンドで対応させます。
DBの対応付け
$ heroku pg:promote postgresql-[文字列]-[数字]
ローカルDBのアップロード
herokuのダッシュボードを開き、アップ済みのアプリケーションの管理ページを開きます。
herokuダッシュボード
今回はpure-beach-70140になりました。
管理画面
Resourcesを押します。
このとき、カラーがRedとなっているため
$ PGUSER=PostgreSQLのユーザー名 PGPASSWORD=パスワード heroku pg:push データベース名 HEROKU_POSTGRESQL_RED_URL
とすることで、ローカルのDBが持つデータをアップすることができます。
※Brown等他のカラーの場合はHEROKU_POSTGRESQL_COLOR_URLのCOLORをその都度変更します。
Tornado内で呼び出し
まず、モジュールをインポートします。
import urlparse import psycopg2 import psycopg2.extras
Applicationクラスの__init__に以下のコードを追加します。
urlparse.uses_netloc.append("postgres") url = urlparse.urlparse(os.environ.get("DATABASE_URL",'postgresql://ユーザー名@localhost/データベース名')) self.conn = psycopg2.connect( database=url.path[1:], user=url.username, password=url.password, host=url.hostname, port=url.port )
以下のコードで呼び出せます。
conn = self.application.conn
cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
cur.execute("select * from test;")