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

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

Какие-нибудь мысли?


person Bnjii    schedule 07.09.2014    source источник
comment
Что конкретно не работает?   -  person dirn    schedule 07.09.2014
comment
Ничего не происходит, он просто печатает «Ошибка БД», что означает, что попытка не удалась. Если я удалю «попробовать:», я получаю ошибку 500.   -  person Bnjii    schedule 07.09.2014
comment
Что является фактическим исключением?   -  person dirn    schedule 07.09.2014
comment
Я не уверен, как мне распечатать исключение? Спасибо!   -  person Bnjii    schedule 07.09.2014


Ответы (3)


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

person Will    schedule 07.09.2014

замените это, чтобы записать сообщение об ошибке:

@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'

опубликуйте свое сообщение об ошибке.

person Hasan Ramezani    schedule 07.09.2014
comment
Спасибо! Я распечатал электронное сообщение и получил: 'NoneType' object has no attribute 'drivername' - person Bnjii; 07.09.2014
comment
проверьте свою конфигурацию с помощью настроенного Flask-SQLAlchemy - person Hasan Ramezani; 07.09.2014

Другое не упомянутое решение - использовать dj_database_url.

import dj_database_url

DATABASES['default'] =  dj_database_url.config()
person Some progammer    schedule 26.05.2021