2017-07-19 40 views
0

我想部署一個測試應用程序,我用Flask製作到Heroku。我無法弄清楚我的代碼應該看起來像將我的應用程序連接到heroku postgresql數據庫資源。這是我的代碼,在我的本地機器上運行良好。如何使用psycopg2將燒瓶應用程序連接到其heroku數據庫?

import os, psycopg2, psycopg2.extras 
from flask import Flask, request, session, g, redirect, url_for, 
    abort, render_template, flash 

app = Flask(__name__) 
app.config.from_object(__name__) 

app.config.update(dict(
    SECRET_KEY='development key', 
    USERNAME='admin', 
    PASSWORD='default' 
)) 

def connect_db(): 
    """Connects to the specific database.""" 
    rv = psycopg2.connect(database='database_name', user='username') 
    return rv 

psycopg2.connect()圓括號裏是什麼?該應用在本地運行良好,但在部署的應用中,每當我單擊需要數據庫查詢的鏈接時,我都會收到內部服務器錯誤。

+0

您是否正在爲您的heroku PG實例使用正確的憑據?提醒:你的連接字符串是在'DATABASE_URL'的env var中定義的,你可能需要解析它的相關數據(hostname,user,pass,port,dbname) –

+0

So rv = psycopg2.connect(DATABASE_URL)?我知道如何找到憑據,我只是不知道把它們放在我的代碼中,而沒有人想放棄這些信息。 – William234234

回答

0

你最好用像SqlAlchemy這樣的ORM並使用os.env.get(url =,default =)獲取Heroku數據庫連接環境變量,這樣你也可以爲你的本地數據庫設置默認屬性。 ..部署時將使用Heroku ENV的連接,當本地將使用本地連接時(默認爲1)

from flask import Flask 
from flask_sqlalchemy import SQLAlchemy 
import os 


app = Flask(__name__) 
DATABASE_DEFAULT = 'postgresql://postgres:[email protected]:5432/mydatabase' 
app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get('DATABASE_URL', DATABASE_DEFAULT) 
db = SQLAlchemy(app) 
相關問題