Flask and PostgreSQL on Heroku

原文链接:Flask and PostgreSQL on Heroku

Heroku 越来越成为我最喜欢的部署简单Python应用程序的平台。Heroku 实际上为你提供了一个完整管理的系统,你只需几分钟就可以部署你的应用。更不用说它的免费版(1 dyno, Postgres dev plan), 实际上给予我们的更多,让我们可以做更多事。

你可以按照Heroku上的官网文档,它给出了如何从头开始,但是我发现它对如何设置Postgres 缺乏一些说明,所以我给出了一个快速部署简单的Python 应用的完整教程。

这篇文章所用的所有代码可在matching repository on Github.找到。

在这里,我会假设你有基本项目基础,如果没有,请参考前面提到的教程。然后我们需要为PostgreSQL 添加支持。我们使用 Flask-SQLAlchemy来做这个,它提供了连接到 Postgres DB 的所有东西,而且可以方便地使用ORM。 所以首先我们需要安装这个依赖,然后把它加到我们的 requirements.txt

1 $ pip install flask-sqlalchemy psycopg2
2 # don't forget to update requirements.txt
3 $ pip freeze > requirements.txt

在继续之前,我们需要先创建一个 Postgres DB,然后我们将从免费开发计划开始,它允许最多10K行和20个并发连接:

1 $ heroku addons:add heroku-postgresql:dev
2 -----> Adding heroku-postgresql:dev to some-app-name...done, v196 (free)
3 Attached as HEROKU_POSTGRESQL_COLOR
4 Database has been created and is available

一旦建立数据库,我们就应该推广它,然后 DATABASE_URL 环境变量将被创建:

$ heroku pg:promote HEROKU_POSTGRESQL_COLOR
Promoting HEROKU_POSTGRESQL_COLOR_URL to DATABASE_URL... done

现在我们可以继续前进,导入库并添加基本连接样板:

from flask.ext.sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = os.environ['DATABASE_URL']
db = SQLAlchemy(app)

对于此步骤,您可以选择使用Kenneth Reitz的 flask-heroku 库,它可以自动处理所有连接URLs,不仅适用于Postgres,还可用于其他服务,如redis,sentry, exceptional 和其他服务。

下一步是提交模板代码并创建DB 表:

$ git commit -a -m "added DB boilerplate"
$ git push heroku master
# ...
$ heroku run python

一旦我们连接上Python终端,我们就可以执行:

>>> from app import db
>>> db.create_all()

我们就设置好了! 从这里,我们可以开始使用SQLAlchemy代码同定义模型和创建,查询和删除目标。 下面是一些例子。我们可以通过创建一个新 User 模型开始:

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

我们可以创建对象本身:

user = User('John Doe', 'john.doe@example.com')
db.session.add(user)
db.session.commit()

我们可以查询目标:

all_users = User.query.all()

我们也可以删除目标:

user = User('John Doe', 'john.doe@example.com')
db.session.delete(user)
db.session.commit()

这就是你需要知道的关于在Heroku上设置Flask + Postgres应用程序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值