最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python FastApi實(shí)現(xiàn)數(shù)據(jù)表遷移流程詳解

 更新時(shí)間:2022年08月18日 16:51:10   作者:測試員阿道夫  
今天我們來聊一聊在FastApi里面,數(shù)據(jù)遷移工作,F(xiàn)astAPI是一個(gè)現(xiàn)代的,快速(高性能)python web框架。本文將利用fastapi實(shí)現(xiàn)數(shù)據(jù)表遷移功能,文中的示例代碼講解詳細(xì),需要的可以參考一下

啥是數(shù)據(jù)遷移

在我們平時(shí)的開發(fā)過程中,經(jīng)常需要對一些數(shù)據(jù)進(jìn)行調(diào)整。一般會(huì)有以下幾種場景:

1.需要新的數(shù)據(jù)表

我們的接口自動(dòng)化平臺(tái)雖然已經(jīng)較為完善了,但難免會(huì)繼續(xù)迭代一些新的功能,假設(shè)我們需要做一個(gè)訂閱用例的功能。

大體想一下就可以知道,訂閱用例以后這個(gè)數(shù)據(jù)得持久化(即入庫),這樣我在查詢誰訂閱了這條用例的時(shí)候,就能獲取到訂閱人,訂閱時(shí)間等數(shù)據(jù)。

這也就意味著我們需要一張訂閱表,里面至少得有訂閱人和訂閱的id,以及訂閱時(shí)間這3個(gè)要素。體現(xiàn)在數(shù)據(jù)庫通俗點(diǎn)說就需要:

// 創(chuàng)建訂閱表, 后面的省略
create table... 

由于業(yè)務(wù)的變動(dòng),導(dǎo)致新的數(shù)據(jù)表誕生。

2.需要對現(xiàn)有表結(jié)構(gòu)進(jìn)行調(diào)整

當(dāng)我們的訂閱表完成以后,有的同學(xué)就發(fā)現(xiàn)了,這個(gè)訂閱好像不能取消,所以我們此時(shí)可能需要一個(gè)新的字段: isValid,這個(gè)字段用來判斷用戶是否取消訂閱了這個(gè)用例,如果我訂閱錯(cuò)了,或者嫌消息太多,想取消訂閱,那還是得滿足需求的。

包括新增字段/修改字段/刪除字段,這些都會(huì)對數(shù)據(jù)表產(chǎn)生影響,導(dǎo)致我們需要改動(dòng)數(shù)據(jù)庫。

回到ORM

我們目前采用sqlalchemy作為我們的orm,如果只需要修改Python的Model類(操作字段就加在Model類里面操作)該多好。這樣的話,我們依然不需要去寫很基礎(chǔ)的sql語句,就能達(dá)到修改表結(jié)構(gòu)的目的。而這個(gè),就是我們今天要講的數(shù)據(jù)遷移。因?yàn)閿?shù)據(jù)需要發(fā)生變化,orm與數(shù)據(jù)庫的邏輯對不上號(hào)了,所以我們需要遷移。

遷移手段

目前市面上,關(guān)于Django(自帶orm)和Flask這塊都很成熟,django因?yàn)橛凶詭У膐rm顯得更牛逼,在manage.py里面自帶了migrate(遷移)的命令。

而我們今天要講的fastapi,由于不像django那么全面,所以我們采用alembic(sqlalchemy作者編寫)來幫助我們完成數(shù)據(jù)遷移操作。

如果你也用的fastapi+sqlalchemy,那我們就一起來耍耍i!

注: sqlalchemy只自帶create_all(建立全部表)的功能

安裝alembic

大家采用虛擬環(huán)境和全局安裝都可以,我的建議是全局安裝,因?yàn)槲覀兛赡軙?huì)在多個(gè)項(xiàng)目使用它。

pip install alembic 

初始化項(xiàng)目

我們在python項(xiàng)目的根目錄輸入以下命令:

alembic init alembic 

alembic是我們剛才安裝的工具,init則是初始化的意思,后面的alembic則是遷移文件夾的名字,一般我們會(huì)默認(rèn)叫alembic,以便于其他人一眼就知道是干嘛的。

修改alembic.ini

執(zhí)行完成之后你會(huì)發(fā)現(xiàn)根目錄多了個(gè)ini配置文件和alembic文件夾,我們需要稍微修改下配置文件:

將alembic.ini中的sqlalchemy.url改為你數(shù)據(jù)庫的jdbc連接地址,以我的為例:

修改alembic/env.py

首先我們找到里面的target_metadata變量,默認(rèn)是None。接著在target_metadata = None上方加入如下代碼:

import sys
from os.path import abspath, dirname
sys.path.append(dirname(dirname(abspath(__file__)))) 

然后我們需要引入我們的model目錄,由于在pity里面,最后的初始化建表工作都是在curd目錄進(jìn)行的:

所以我這邊是引入crud里面的Base。這個(gè)Base是啥玩意呢?

我們使用sqlalchemy,都需要引入各種model,這些model最終都會(huì)被加入到Base.metadata,這樣sqlalchemy就知道你有哪些表需要處理了。

我們繼續(xù)修改env.py,也就是告訴alembic你有哪些數(shù)據(jù)表(上文說的, 數(shù)據(jù)表都在Base.metadata)。

# 注意這個(gè)地方是要引入模型里面的Base,不是connect里面的
from app.crud import Base
# 告訴alembic 你的表數(shù)據(jù)在哪
target_metadata = Base.metadata 

開始生成遷移工作

要注意,我們配置這么多東西是為了讓alembic知道你的model都在哪,你的數(shù)據(jù)庫怎么連,這樣它才能去對比差異并生成結(jié)果。

alembic revision --autogenerate -m "test" 

稍作等待,我們可以在alembic/versions目錄看到對應(yīng)的py文件:

里面會(huì)有drop_column(刪除字段)這樣的操作信息。但要注意,這并沒有真正修改數(shù)據(jù)庫。

變更數(shù)據(jù)庫

alembic upgrade head 

執(zhí)行上述命令,alembic就會(huì)根據(jù)你當(dāng)前的版本(應(yīng)該是你剛才生成的version的py腳本)去執(zhí)行數(shù)據(jù)庫變更操作。

這樣,一個(gè)簡單的遷移工作就完成了。接著我們聊聊注意事項(xiàng)。

FAQ

Q. 版本py腳本無變更信息出現(xiàn)

A. 請檢查你的數(shù)據(jù)庫是否真有變更,檢查你的數(shù)據(jù)庫url是否正確,檢查你的model是否引入正確,如果操作都沒問題,可以刪除alembic目錄和ini,重復(fù)上述操作(我昨晚就是這樣的)

Q. 為什么字段重命名沒有產(chǎn)生變更

A. 這玩意只校驗(yàn)了新增/修改/刪除字段,這里的修改指的是字段的nullable這種修改,所以改字段名它不會(huì)檢測。

Q. 我數(shù)據(jù)庫里面有表沒有定義到model,為啥變更給俺把表刪除了?

A. 這個(gè)問題我也發(fā)現(xiàn)了,應(yīng)該是有什么配置可以配置不刪除未找到的表,但我目前還沒有去研究,有后續(xù)會(huì)在底部留言。

最后,這個(gè)玩意相對比較雞肋,建議不要大批量變更??梢灶l率高一點(diǎn),比如有一點(diǎn)點(diǎn)改動(dòng)就用它變更一下,而不要在史詩級(jí)改動(dòng)的時(shí)候使用它。我個(gè)人的整體感受是,不太好用,但勉強(qiáng)能用。(因?yàn)闀簳r(shí)沒有發(fā)現(xiàn)更合適的)

到此這篇關(guān)于python FastApi實(shí)現(xiàn)數(shù)據(jù)表遷移流程詳解的文章就介紹到這了,更多相關(guān)python數(shù)據(jù)表遷移內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python之tkinter列表框Listbox與滾動(dòng)條Scrollbar解讀

    Python之tkinter列表框Listbox與滾動(dòng)條Scrollbar解讀

    這篇文章主要介紹了Python之tkinter列表框Listbox與滾動(dòng)條Scrollbar解讀,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • pycocotools介紹以及在windows10下的安裝過程

    pycocotools介紹以及在windows10下的安裝過程

    這篇文章主要介紹了pycocotools介紹以及在windows10下的安裝過程,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Python基于pyopencv人臉識(shí)別并繪制GUI界面

    Python基于pyopencv人臉識(shí)別并繪制GUI界面

    本文詳細(xì)講解了Python基于pyopencv人臉識(shí)別并繪制GUI界面,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • Python使用itchat模塊實(shí)現(xiàn)群聊轉(zhuǎn)發(fā),自動(dòng)回復(fù)功能示例

    Python使用itchat模塊實(shí)現(xiàn)群聊轉(zhuǎn)發(fā),自動(dòng)回復(fù)功能示例

    這篇文章主要介紹了Python使用itchat模塊實(shí)現(xiàn)群聊轉(zhuǎn)發(fā),自動(dòng)回復(fù)功能,結(jié)合實(shí)例形式分析了Python基于itchat模塊針對微信信息的發(fā)送、回復(fù)等相關(guān)操作技巧,需要的朋友可以參考下
    2019-08-08
  • python安裝PIL模塊時(shí)Unable to find vcvarsall.bat錯(cuò)誤的解決方法

    python安裝PIL模塊時(shí)Unable to find vcvarsall.bat錯(cuò)誤的解決方法

    這篇文章給大家分享了關(guān)于python安裝PIL模塊時(shí)遇到Unable to find vcvarsall.bat錯(cuò)誤的解決方法,相信會(huì)對不少人有一定的參考借鑒價(jià)值。有需要的朋友們下面來一起看看吧。
    2016-09-09
  • 舉例講解Python中的死鎖、可重入鎖和互斥鎖

    舉例講解Python中的死鎖、可重入鎖和互斥鎖

    這篇文章主要介紹了舉例講解Python中的死鎖、可重入鎖和互斥鎖,盡管線程編程方面Python的GIL問題老生常談...需要的朋友可以參考下
    2015-11-11
  • Python餅狀圖的繪制實(shí)例

    Python餅狀圖的繪制實(shí)例

    今天小編就為大家分享一篇關(guān)于Python餅狀圖的繪制實(shí)例,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • ?Python錯(cuò)誤與異常處理

    ?Python錯(cuò)誤與異常處理

    這篇文章主要介紹了?Python錯(cuò)誤與異常處理,錯(cuò)誤與異常處理在Python中具有非常重要的地位,熟練的使用錯(cuò)誤與異常處理能夠?yàn)槲覀兊腜ython編程提供很多的便利之處,希望您閱讀完本文后能夠有所收獲
    2022-01-01
  • Python生成字符視頻的實(shí)現(xiàn)示例

    Python生成字符視頻的實(shí)現(xiàn)示例

    在之前也寫過生成字符視頻的文章,但是使用的是命令行窗口輸出,效果不是很好,而且存在卡頓的情況,所以本文介紹了mp4的字符視頻,感興趣的可以了解一下
    2021-05-05
  • python中range()與xrange()用法分析

    python中range()與xrange()用法分析

    這篇文章主要介紹了python中range()與xrange()用法,結(jié)合實(shí)例形式分析了range()與xrange()使用與效率上的區(qū)別,需要的朋友可以參考下
    2016-09-09

最新評(píng)論

潼关县| 滁州市| 德庆县| 太保市| 郑州市| 瑞金市| 恭城| 江安县| 黄石市| 永泰县| 丰台区| 定南县| 韶关市| 六枝特区| 水城县| 永寿县| 海宁市| 松滋市| 霍邱县| 泰安市| 台前县| 灌云县| 宁化县| 准格尔旗| 望江县| 南汇区| 易门县| 法库县| 宁安市| 南郑县| 象州县| 肥城市| 凯里市| 双城市| 德阳市| 沙河市| 瑞丽市| 四子王旗| 吴江市| 普宁市| 北辰区|