2014-09-07 5 views
0

У меня есть приложение Python 2.7/Flask, работающее на Heroku, которое сбрасывает данные, и теперь я хочу сохранить эту информацию в базе данных.Не удается получить доступ к Postgres DB на приложении Heroku

Я попытался следовать учебникам like this one и применить это к моему делу, но я не могу заставить его работать. Я создал & продвинул мою базу данных postgres успешно на heroku.

Я довольно новичок в архитектуре проекта 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', '[email protected]') 
     db.session.add(user) 
     db.session.commit() 
    except: 
     print 'DB error' 
    return 'done' 

В принципе, когда я visit myapp/db Я хочу создать одну запись с идентификатором, именем и электронной почтой (john, [email protected]).

Любые мысли?

+0

Что конкретно не работает? – dirn

+0

Ничего не происходит, он просто печатает ошибку «DB», что означает, что попытка не удалась. Если я удалю «try:», я получаю ошибку 500. – Bnjii

+0

Каково фактическое исключение? – dirn

ответ

3

Это должно быть os.environ.get('DATABASE_URL')

+0

Спасибо Будет! Кажется, сейчас так очевидно ... – Bnjii

2

заменить это войти сообщение об ошибке:

@app.route('/db') 
def dbtest(): 
try: 
    user = User('John', '[email protected]') 
    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' 

отправить сообщение об ошибке.

+0

Спасибо! Я напечатал e.message и получил: «Объект NoneType» не имеет атрибута «drivername» – Bnjii

+0

проверить свою конфигурацию с помощью [сконфигурированной Flask-SQLAlchemy] (http://pythonhosted.org/Flask-SQLAlchemy/config.html) –

Смежные вопросы