重新启动应用程序后删除已添加的数据库记录(heroku / SQLAlchemy)

时间:2016-04-06 14:57:44

标签: python sql postgresql heroku flask-sqlalchemy

所以这是我的问题:我创建了一个按预期工作的heroku应用程序,但是当重新启动应用程序时,数据库中的所有新记录都将被删除。当我“推送到heroku”时复制的本地数据库中的那些仍在那里。

我是PostgresSQL的新手,但我仔细阅读了将代码部署到heroku并设置数据库的说明。这是我配置的一部分:

# defines the full path for the database
DATABASE_PATH = os.path.join(basedir, DATABASE)
# the database uri
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + DATABASE_PATH

我知道最后一行不是应该如何建立与heroku数据库的连接(sqlite),尽管我仍然想知道发生了什么。

当我向数据库添加数据时,我使用db.session.add(data)和db.session.commit()。 我创建了一个像这样的heroku数据库:

$ heroku addons:create heroku-postgresql:hobby-dev

重启应用后会发生什么?我可能遗漏了一些明显的东西。

修改

@admin_blueprint.route('/modify/add-post/',methods=['GET', 'POST'])
@login_required
def add_post():
    error = None
    form = AddPostForm(request.form)
    if request.method == 'POST':
        if form.validate_on_submit():
            now=datetime.datetime.now()  
            poster=session['adminname']
            new_post = Post(form.text.data,poster, now,form.add_file.data)
            db.session.add(new_post)
            db.session.commit()

            return redirect(url_for('home.posts'))
        else: 
            return render_template("adm_posts.html",error=error,form=form)

    if request.method == 'GET':
        return render_template("adm_posts.html",form=form)

谢谢!

1 个答案:

答案 0 :(得分:0)

两件事 - 1)使用Heroku在环境中提供的配置连接到PostgreSQL实例。只需使用:

import os
SQL_ALCHEMY_DATABASE_URI = os.environ['DATABASE_URL']

环境变量DATABASE_URL将由Heroku填充,并具有连接信息(主机,用户名,密码,数据库)。

2)Heroku文件系统短暂,并且在dyno重启之间不会持续存在。这就是你的sqlite数据库消失的原因。