iT邦幫忙

4

Flask web & PostgreSQL DB!

嗨!大家好久不見,因為連假有點無聊(邊緣人),所以想說學一下PostgreSQL怎麼用,就順便紀錄過程分享。因為自己本身不是前後端專門,所以如果哪裡有誤請大家多多包涵指教,那就開始囉~

Summary

  • Install Postgres.app
  • Create First Flask web app
  • Initialize Database Object
  • DB Configure
  • Define Models
  • Manager
  • Migrations and Update

Install Postgres.app

這裡就不特別說明Postgres的安裝了,連結在下方(MacOS):

  1. Postgres.app
  2. GUI 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 SQLAlchemy
db = 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 Manager
from flask_migrate import Migrate, MigrateCommand
from app import app, db
migrate = 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

好的,那今天就到這裡囉~掰掰!


尚未有邦友留言

立即登入留言