无法访问Heroku应用上的Postgres数据库

0 投票
3 回答
1350 浏览
提问于 2025-04-20 06:00

我有一个在Heroku上运行的Python 2.7 / Flask应用,它可以抓取数据,现在我想把这些信息存储到数据库里。

我尝试过按照一些教程比如这个来做,但就是无法让它正常工作。我已经在Heroku上成功创建并推广了我的Postgres数据库。

我对Python项目的结构还比较陌生,怀疑我的设置中可能有简单的问题。

这是我的项目结构

/myapplication
    Procfile
    run.py
    requirements.txt
    /app
        __init__.py
        mechanize_boilerplate.py
        views.py
        /static
        /templates

这是我的 init.py 文件

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
import os

app = Flask(__name__)
# DB Configuration
app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get('postgres://{link I got from heroku}')
db = SQLAlchemy(app)


from app import views

这是我的 views.py 文件的一部分

from app import app
import mechanize_boilerplate
import os
from flask import Flask, render_template, request
from app import db

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80))
    email = db.Column(db.String(120), unique=True)

    def __init__(self, name, email):
        self.name = name
        self.email = email

    def __repr__(self):
        return '<Name %r>' % self.name

@app.route('/db')
def dbtest():
    try:
        user = User('John', 'Foo@bar.com')
        db.session.add(user)
        db.session.commit()
    except:
        print 'DB error'
    return 'done'

基本上,当我访问 myapp/db 时,我想创建一条记录,包含id、名字和邮箱(john, foo@bar.com)。

有什么想法吗?

3 个回答

0

还有一个没有提到的解决方案是使用 dj_database_url。

import dj_database_url

DATABASES['default'] =  dj_database_url.config()
2

把这个换成记录错误信息的代码:

@app.route('/db')
def dbtest():
try:
    user = User('John', 'Foo@bar.com')
    db.session.add(user)
    db.session.commit()
except Exception as e:
    f = open('/tmp/error.log', 'w')
    f.write(e.message)
    f.close()
return 'done'

把你的错误信息发过来。

3

应该是 os.environ.get('DATABASE_URL')

这段代码。

撰写回答