激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - Flask 數(shù)據(jù)庫遷移詳情

Flask 數(shù)據(jù)庫遷移詳情

2022-03-08 00:25tigeriaf Python

本文給大家分享的是 Flask 數(shù)據(jù)庫遷移詳情,db.create_all()不會重新創(chuàng)建表或是更新表,需要先使用db.drop_all()刪除數(shù)據(jù)庫中所有的表之后再調(diào)用db.create_all()才能重新創(chuàng)建表,但是這樣的話,原來表中的數(shù)據(jù)就都被刪除了,這肯定是不行的,這時

1、使用 Flask-Migrate 實現(xiàn)數(shù)據(jù)庫遷移

db.create_all()不會重新創(chuàng)建表或是更新表,需要先使用db.drop_all()刪除數(shù)據(jù)庫中所有的表之后再調(diào)用db.create_all()才能重新創(chuàng)建表,但是這樣的話,原來表中的數(shù)據(jù)就都被刪除了,這肯定是不行的,這時就出現(xiàn)了數(shù)據(jù)庫遷移的概念。

在開發(fā)過程中,隨著需求的變化,有可能需要添加或修改表的一些字段,但是原表中的數(shù)據(jù)不能刪除,此時就需要創(chuàng)建新表,并將舊表中的數(shù)據(jù)遷移至新表中,Flask-Migrate這個擴展就可以在不破壞數(shù)據(jù)的情況下更新數(shù)據(jù)庫表的結(jié)構(gòu),并完成數(shù)據(jù)從舊表到新表的遷移。

2、Flask-Migrate的使用

可以使用pip install flask-migrate進行安裝。在程序中,我們實例化 Flask_Migrate 提供的 Migrate 類,進行初始化操作。

?
1
2
3
4
5
6
7
8
9
10
11
from flask_migrate import Migrate
 
from flask_sqlalchemy import SQLAlchemy
 
app = Flask(__name__)
 
···
 
db = SQLAlchemy(app)
 
migrate = Migrate(app, db)

實例化 Migrate 類,需要傳入 Flask 實例 app SQLAlchemy創(chuàng)建的實例 db。

2.1 數(shù)據(jù)庫的遷移過程

先定義 User 模型類。

?
1
2
3
4
5
6
7
8
9
class User(db.Model):
 
    __tablename__ = 'user'
 
    id = db.Column(db.Integer, primary_key=True)
 
    user_name = db.Column(db.String)
 
    password = db.Column(db.String)

2.1.1 創(chuàng)建遷移環(huán)境

在開始遷移數(shù)據(jù)之前,需要先使用下面的命令創(chuàng)建一個遷移環(huán)境:

?
1
flask db init

遷移環(huán)境只需創(chuàng)建一次,創(chuàng)建后會在項目根目錄下生成一個 migrations 目錄,其中包含了自動生成的配置文件和遷移版本目錄。

Flask 數(shù)據(jù)庫遷移詳情

2.1.2 生成遷移腳本

使用如下命令自動生成遷移腳本:

?
1
flask db migrate -m "create_table"

-m 選項添加備注信息,執(zhí)行后遷移版本目錄生成了遷移腳本。

Flask 數(shù)據(jù)庫遷移詳情

遷移腳本內(nèi)有兩個函數(shù):

  • upgrade():把遷移中的改動應(yīng)用到數(shù)據(jù)庫中
  • downgrade():將改動撤銷

自動生成的遷移腳本會根據(jù)模型定義和數(shù)據(jù)庫當前狀態(tài)的差異,生成upgrade()downgrade()函數(shù)的內(nèi)容,不一定完全正確,有必要再進行檢查一下。

2.1.3 更新數(shù)據(jù)庫

生成了遷移腳本后,使用flask db upgrade命令可完成對數(shù)據(jù)庫的更新。執(zhí)行后即可生成數(shù)據(jù)庫及表。

如果之后我們需要改動 user 表中的字段,比如添加一個mobile字段,我們只需在 User 模型類中添加該屬性,之后執(zhí)行flask db migrate -m '注釋'和flask db upgrade命令即可。

?
1
2
3
4
5
6
7
8
9
10
11
class User(db.Model):
 
    __tablename__ = 'user'
 
    id = db.Column(db.Integer, primary_key=True)
 
    user_name = db.Column(db.String)
 
    password = db.Column(db.String)
 
    mobile = db.Column(db.String)

如果想要回滾遷移的話,可以執(zhí)行flask db downgrade命令。

3、總結(jié)

這里只是介紹如何在 Flask 中進行數(shù)據(jù)庫遷移,關(guān)于在生產(chǎn)環(huán)境下,是否需要使用遷移工具或者使用何種工具進行遷移,這里不做討論,至于我的話,在生產(chǎn)環(huán)境中,我沒有使用過Flask-Migrate,而是選擇編寫 SQL 腳本來處理數(shù)據(jù)庫及表的更新或改動,我覺得這樣更不容易出錯,其實各有各的好處,看自己選擇。

到此這篇關(guān)于 Flask 數(shù)據(jù)庫遷移詳情的文章就介紹到這了,更多相關(guān) Flask 數(shù)據(jù)庫遷移內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://juejin.cn/post/7032081133

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: av在线中文 | 久久精品国产亚洲7777小说 | 男女无套免费视频 | 国产91一区| 狠狠久久伊人中文字幕 | 羞羞视频.www在线观看 | 视频一区二区国产 | 国产精品毛片无码 | 亚洲电影在线播放 | 欧美一级免费看 | 欧美a级在线免费观看 | 一日本道久久久精品国产 | teensexhd | 欧美一级黄色录像片 | 亚洲网站免费看 | 99影视电影电视剧在线播放 | 欧美国产成人在线 | 免费a级黄色片 | 国产乱淫av | 亚洲成人福利在线 | 日韩在线播放一区二区 | 亚洲欧洲日产v特级毛片 | 俄罗斯16一20sex牲色另类 | 黄网站进入 | 小雪奶水翁胀公吸小说最新章节 | 亚洲视频高清 | 中文字幕精品亚洲 | 亚洲二区免费 | 亚洲综合中文 | 国产精品片一区二区三区 | 久久欧美亚洲另类专区91大神 | 欧美一级高潮片免费的 | 黄色大片免费看 | 精品免费国产一区二区三区 | 成人免费在线视频 | 国产亚洲精品综合一区91555 | 伊人99在线| 香蕉在线看| 欧洲成人精品 | 亚洲免费毛片基地 | 韩国草草影院 |