Flask web & PostgreSQL DB!

嗨!大家好久不见,因为连假有点无聊(边缘人),所以想说学一下PostgreSQL怎么用,就顺便纪录过程分享。因为自己本身不是前后端专门,所以如果哪里有误请大家多多包涵指教,那就开始啰~

Summary

Install Postgres.appCreate First Flask web appInitialize Database ObjectDB ConfigureDefine ModelsManagerMigrations and Update

Install Postgres.app

这里就不特别说明Postgres的安装了,连结在下方(MacOS):

Postgres.appGUI tool

Create First Flask web app

建立一个app.py的档案,用来定义与执行此应用程式。在Flask要建立一个程式的进入点只需要汇入它(import flask class),并且初始及实例化:
app = Flask(__name__)
记得再加上:
if __name__ == '__main__':    app.run()

这段程式码是为了自动执行flask的class内所有function。

当然,这样还没有结束,现在我们要简单的建立一个网页的画面显示My Flask App,请加上以下程式码:
@app.route('/')def index():    return 'My Flask App!'
加上DEBUG模式,当程式码更改的时候会自动重整而且可以看到更细节的错误讯息:(记得将config的内容都加在app.run()前)
app.config['DEBUG'] = True
执行app.py后,可以看到Running on http://127.0.0.1:5000/这表示我们的程式码已经执行起来了,并且在5000port。到localhost:5000看一下是否有画面,就可以看到My Flask App!没有的话请检查是否是5000,不是的话请自行更改!

那我们第一个Flask web app就完成了!

Initialize Database Object

那接下来要建立资料库了,Flask内有Flask-Alchemy可以用来操作PostreSQL。没有的话请先用pip安装起来!

你可以直接在app.py内直接新增程式码,或是分开到另外一个models.py,并且加上:
from flask_sqlalchemy import SQLAlchemydb = SQLAlchemy()

PostgreSQL Configure

在Flask内有提供语法让我们轻易连接PostgreSQL,只需要将postgresql://的内容更改成自己资料库的设定。
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://DB_USER:PASSWORD@HOST/DATABASE'
或是习惯分开设置像这个样子:
POSTGRES = {    'user': 'plusone',    'password': 'my_password',    'db': 'my_database',    'host': 'localhost',    'port': '5432',}app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://%(user)s:\%(password)s@%(host)s:%(port)s/%(db)s' % POSTGRES
现在我们必须加上db.init_app(app)连接我们的应用程式,不过在这之前请先import dbapp.py附注:我将models分开写所以import models
from models import db# your app config  db.init_app(app)

Define Models Class

在前面Configure时我们已经定义好要的Database了,现在要来新增资料库表格。

在Model Class内定义我们的表格内容:
class User(db.Model):    __tablename__ = 'users'    id = db.Column(db.Integer, primary_key = True)    name = db.Column(db.String(255),nullable=False)    birthday = db.Column(db.String(10))    phone = db.Column(db.String(10), unique=True, nullable=False)    email = db.Column(db.String(255), nullable=False, unique=True) 
__tablename__:定义表格名称。id, name, birthday, phone, email为我们表格内的column名称(根据自己需求去定义)。

Create Manager

现在建立好Class了,现在我们要透过flask_scriptflask_migrate模组来执行资料库的migrations。先建立一个manage.py档案。

汇入 Migrate, MigrateCommand
from flask_script import Managerfrom flask_migrate import Migrate, MigrateCommandfrom app import app, dbmigrate = Migrate(app, db)manager = Manager(app)manager.add_command('db', MigrateCommand)
因为需要能够执行manage.pymigration指令,所以最后需要加上:
if __name__ == '__main__':    manager.run()

Finally, Migrations and Update!

最后我们要来migrate我们的应用了!(话说前阵子因为需要学laravel才比较知道model migrate是什么XD)

在终端机执行:
$ python manage.py db init
会看到你的专案底下多了一个migrations的资料夹,执行manage档案的db migrate产生新的Migrationmigrations资料夹。
$ python manage.py db migrate
$ python manage.py db upgrade
资料库中的migration有任何更改或更新版本,都可以在alembic_version看到。如下图,包含了alembic_versiontable以及userstable.

Imgur

好的,那今天就到这里啰~掰掰!


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章