中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

flask中更新數據庫的方法

發布時間:2020-08-13 14:20:58 來源:億速云 閱讀:170 作者:小新 欄目:編程語言

這篇文章主要介紹了flask中更新數據庫的方法,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

更新數據庫庫表

模型類(表)不是一成不變的,當你添加了新的模型類,或是在模型類中添加了新的字段,甚至是修改了字段的名稱或類型,都需要更新表。在前面我們把數據庫表比成盛放貨物的貨架,這些貨架是固定生成的。當我們在操控程序(DBMS/ORM)變更了貨架的結構時,倉庫的貨架也要根據變化相應進行調整。而且,當貨架的結構產生變動時,我們還需要考慮如何處理貨架上的貨物(數據)。

當你在數據庫的模型中添加了一個新的字段后,比如在Note模型里添加了一個存儲筆記創建時間的timestamp字段。

class Note(db.Model):
    id = db.Column(db.Integer, primary_key=True)    timeStamp = db.Column(db.String(70), unique=True)
    body = db.Column(db.Text)    def __repr__(self):        # %r是用repr()方法處理對象,返回類型本身,而不進行類型轉化
        return '<Note %r>' % self.body

此時模型類的定義中,加入了一個新的列,在命令行界面初始化數據時,只給了body賦了值,此時訪問這個表的數據時,這條數據有一個字段沒有初始化,就是表的結構變化了,需要更新這個表結構,才能正常訪問。

這時在命令行里查看note表的字段時,會看到報錯:

>>> Note.query.all()
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such column: note.timeStamp
[SQL: SELECT note.id AS note_id, note."timeStamp" AS "note_timeStamp", note.body AS note_body
FROM note]

這段錯誤信息支出note表中沒有timestamp列,并在中括號里給出了查詢所對應的SQL原語,之所以會出錯,是因為數據庫并不會隨著模型的修改而自動更新。就像之前關于倉庫的比喻,倉庫里來了一批新類型的貨物,可我們還沒為他們安排響應的貨架,這當然要出湊了,下面學習如果更新數據庫。

重新生成表

重新調用create_all()方法并不會起到更新表或重新創建表的作用。如果你并不在意表中的數據,最簡單的方法是使用drop_all()方法刪除表以及其中的數據,然后再使用create_all()方法重新創建:

>>> db.drop_all()
>>> db.create_all()

這會清除數據庫里的原有數據,請勿在生產環境下使用。

為了方便開發,我們修改initdb命令函數的內容,為其增加一個—drop選項來支持刪除表和數據庫后進行重建,如下所示:

app.py: 支持刪除表后重建

@app.cli.command()
@click.option('--drop', is_flag=True, help='Create after drop')def initdb(drop):    """Initialize the database."""
    if drop:
        click.confirm('This operation will delete the database, do you want to continue?', abort = True)
        db.drop_all()
        click.echo('Drop tables.')
    db.create_all()
    click.echo('Initialized database.')

在這個命令函數前,我們使用click提供的option裝飾器為命令添加了一個—drop選項,將is_flag參數設為True可以將這個選項聲明為布爾值標志(boolean flag)。--drop選項的值作為drop參數傳入命令函數,如果提供了這個選項,那么drop的值將是True,否則為False。因為添加—drop選項會直接清空數據庫內容,如果需要,也可以通過click.confirm()函數添加一個確認提示,這樣只有輸入y或yes才會繼續執行操作。

下面來用這個命令重建數據庫和表:

(Lenovo-ezd1lI9Y) D:\flask\FLASK_PRACTICE\DataBase>flask initdb --dropThis operation will delete the database, 
do you want to continue? [y/N]: y
Drop tables.
Initialized database.

感謝你能夠認真閱讀完這篇文章,希望小編分享flask中更新數據庫的方法內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

惠水县| 沾化县| 洛扎县| 遂昌县| 长沙市| 察隅县| 常熟市| 阿坝| 郎溪县| 搜索| 南丰县| 洪雅县| 平乡县| 莱西市| 屏山县| 麻阳| 邢台市| 伊春市| 巨野县| 柳江县| 阆中市| 田林县| 大悟县| 漳州市| 淮北市| 安平县| 宜兰市| 鹤峰县| 绥滨县| 酉阳| 新田县| 政和县| 玉门市| 鄢陵县| 东城区| 邹平县| 密云县| 进贤县| 大理市| 杭锦后旗| 青川县|