【问题标题】:How do I connect my flask app to its heroku database using psycopg2?如何使用 psycopg2 将我的烧瓶应用程序连接到它的 heroku 数据库?
【发布时间】:2017-07-19 00:29:45
【问题描述】:

我正在尝试将使用 Flask 制作的测试应用程序部署到 Heroku。我无法弄清楚将我的应用程序连接到 heroku postgresql 数据库资源的代码应该是什么样子。这是我在本地机器上运行良好的代码。

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() 括号中的内容是什么?该应用程序在本地运行良好,但在已部署的应用程序上,每当我单击需要数据库查询的链接时,都会出现内部服务器错误。

【问题讨论】:

  • 您是否为您的 heroku PG 实例使用了正确的凭据?提醒:您的连接字符串是在DATABASE_URL env var 中定义的,您可能需要解析它以获得相关数据(主机名、用户、密码、端口、数据库名)
  • 所以 rv = psycopg2.connect(DATABASE_URL)?我知道如何找到凭据,只是不知道将它们放在我的代码中的哪个位置,而且没有人愿意放弃这些信息。

标签: postgresql heroku flask


【解决方案1】:

您最好使用像 SqlAlchemy 这样的 ORM 并使用 os.env.get(url=, default=) 获取 Heroku 数据库连接环境变量,这样您还可以为本地数据库设置默认属性.. . 部署时将使用 Heroku ENV 的连接,本地时将使用本地连接(默认一个)

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import os


app = Flask(__name__)
DATABASE_DEFAULT = 'postgresql://postgres:password@localhost:5432/mydatabase'
app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get('DATABASE_URL', DATABASE_DEFAULT)
db = SQLAlchemy(app)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 2021-12-28
    • 2020-08-22
    • 2015-04-13
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多