嗨!大家好久不見,因為連假有點無聊(邊緣人),所以想說學一下PostgreSQL
怎麼用,就順便紀錄過程分享。因為自己本身不是前後端專門,所以如果哪裡有誤請大家多多包涵指教,那就開始囉~
這裡就不特別說明Postgres的安裝了,連結在下方(MacOS):
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!'
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就完成了!
那接下來要建立資料庫了,Flask內有Flask-Alchemy
可以用來操作PostreSQL
。沒有的話請先用pip
安裝起來!
app.py
內直接新增程式碼,或是分開到另外一個models.py
,並且加上:from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
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)
在前面Configure時我們已經定義好要的Database了,現在要來新增資料庫表格。
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
名稱(根據自己需求去定義)。現在建立好Class了,現在我們要透過flask_script
及flask_migrate
模組來執行資料庫的migrations
。先建立一個manage.py
檔案。
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.py
中migration
指令,所以最後需要加上:if __name__ == '__main__':
manager.run()
最後我們要來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.好的,那今天就到這裡囉~掰掰!