Flask學習——資料庫遷移
阿新 • • 發佈:2019-01-26
0x01
前言
用過Django的小夥伴都知道,Django的ORM是自帶的,比較特殊,而且集成了很多功能,比如資料庫遷移…
何為ORM,個人之見解,簡化sql語句的書寫,將關係型資料庫的一張張錶轉化為了python的類,最大的好處是簡化了學習成本,不會sql語句的程式設計師也能平滑的使用資料庫,並且天生防sql注入。flask可以使用SQLAlchemy,包名為flask-sqlalchemy.至於具體用法翻譯的官方文件講的也足夠清楚。大家直接谷歌跟著文件就能搞定,本篇主要講如何進行資料庫遷移。
flask的小工具
大家從Django轉至Flask最明顯的一個差異就是,flask直接執行就可以啟動服務,Django是使用了runserver來進行執行。至於好壞大家自行斟酌。這裡提一個外掛。flask-script。pip安裝即可。
from flask_script import Manager
......
manager = Manager(app)
......
#app.run() #註釋這句
manager.run()
這樣,啟動的方式變為 python main.py runserver
這似乎有點畫蛇添足,實則不然,這和我們下面要講的資料庫遷移有很大的聯絡。
資料庫遷移
需要用的的外掛 flask-migrate
安裝之
main.py
from flask import Flask
from flask_script import Manager
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate,MigrateCommand
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////opt/db.sqlite' #使用sqlite3資料庫
db = SQLAlchemy(app) #ORM
migrate = Migrate(app,db)
manager = Manager(app)
manager.add_comman('db',MigrateCommand) #新增db 命令(runserver的用法)
#一個使用者表
class User(db.Model):
...
...
省略
if __name__ == '__main__':
manager.run()
這樣,準備工作已經就緒。
執行python main.py db init
建立資料表。並且會在你專案下生成migrations/目錄,儲存你資料庫每次變更的內容。
修改User類。
python main.py db migrate
提交修改
python main.py db upgrade
執行修改
再看User表,已經改變。
python main.py db downgrade
回退修改
有一點注意的:SQLite3不能刪除有值的列…所以,大家就不要刪除列了…