嗨!大家好久不见,因为连假有点无聊(边缘人),所以想说学一下PostgreSQL
怎么用,就顺便纪录过程分享。因为自己本身不是前后端专门,所以如果哪里有误请大家多多包涵指教,那就开始啰~
Summary
Install Postgres.appCreate First Flask web appInitialize Database ObjectDB ConfigureDefine ModelsManagerMigrations and UpdateInstall Postgres.app
这里就不特别说明Postgres的安装了,连结在下方(MacOS):
Postgres.appGUI toolCreate 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/
这表示我们的程式码已经执行起来了,并且在5000
port。到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 db
到app.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_script
及flask_migrate
模组来执行资料库的migrations
。先建立一个manage.py
档案。
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.py
中migration
指令,所以最后需要加上:if __name__ == '__main__': manager.run()
Finally, Migrations and Update!
最后我们要来migrate我们的应用了!(话说前阵子因为需要学laravel才比较知道model migrate是什么XD)
在终端机执行:$ python manage.py db init
会看到你的专案底下多了一个migrations
的资料夹,执行manage档案的db migrate
产生新的Migration
到migrations
资料夹。$ python manage.py db migrate
$ python manage.py db upgrade
资料库中的migration
有任何更改或更新版本,都可以在alembic_version
看到。如下图,包含了alembic_version
table以及users
table.好的,那今天就到这里啰~掰掰!