欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Flask 數(shù)據(jù)庫(kù)集成的介紹

 更新時(shí)間:2021年11月26日 09:14:44   作者:tigeriaf  
這篇文章主要給大家分享了Flask 數(shù)據(jù)庫(kù)集成的介紹,數(shù)據(jù)庫(kù)是大多數(shù) Web 應(yīng)用的基礎(chǔ)設(shè)施,只要想把數(shù)據(jù)存儲(chǔ)下來(lái),就離不開(kāi)數(shù)據(jù)庫(kù),下面將一起學(xué)習(xí)一下如何給 Flask 應(yīng)用添加數(shù)據(jù)庫(kù)支持。下面詳細(xì)內(nèi)容,需要的朋友可以參考一下

前言:

數(shù)據(jù)庫(kù)是大多數(shù) Web 應(yīng)用的基礎(chǔ)設(shè)施,只要想把數(shù)據(jù)存儲(chǔ)下來(lái),就離不開(kāi)數(shù)據(jù)庫(kù),下面將一起學(xué)習(xí)一下如何給 Flask 應(yīng)用添加數(shù)據(jù)庫(kù)支持。

1、使用Flask-SQLAlchemy管理數(shù)據(jù)庫(kù)

Flask-SQLAlchemy 集成了 SQLAlchemy,它簡(jiǎn)化了連接數(shù)據(jù)庫(kù)服務(wù)器、管理數(shù)據(jù)庫(kù)及操作會(huì)話等各類工作,讓 Flask 更方便的進(jìn)行數(shù)據(jù)存儲(chǔ)及處理,我們不必過(guò)多關(guān)心原生 SQL 語(yǔ)句,只需要使用 Python 類就可以輕松的完成對(duì)數(shù)據(jù)庫(kù)表的增刪改查操作,并且該插件還支持多種數(shù)據(jù)庫(kù)類型,如MySQL、PostgreSQL、和SQLite等。

我們可以使用pip install flask-sqlalchemy進(jìn)行安裝。

1.1 配置Flask_SQLAlchemy

下面以 SQLite 數(shù)據(jù)庫(kù)為例,Flask-SQLAlchemy 數(shù)據(jù)庫(kù)的 url 通過(guò)配置變量SQLALCHEMY_DATABASE_URI指定,通過(guò) Flask-SQLAlchemy 提供的 SQLAlchemy 類傳入 Flask 的實(shí)例 app,創(chuàng)建 db 實(shí)例,表示程序使用的數(shù)據(jù)庫(kù),這個(gè) db 對(duì)象能夠使用 Flask-SQLAlchemy 的所有功能。

from flask import Flask

from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

basedir = os.path.abspath(app.root_path)

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'data.db')

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

其中,SQLALCHEMY_TRACK_ MODIFICATIONS配置變量表示是否追蹤對(duì)象的修改,在此設(shè)為False。

1.2 定義數(shù)據(jù)庫(kù)模型

所謂數(shù)據(jù)模型,就是用來(lái)映射數(shù)據(jù)庫(kù)表的 Python 類,一個(gè)數(shù)據(jù)模型類對(duì)應(yīng)數(shù)據(jù)庫(kù)中的一個(gè)表,類的屬性代表數(shù)據(jù)庫(kù)表的字段。所有的模型類都需要繼承 Flask-SQLAlchemy 提供db.Model基類。

新建model.py文件,定義User類如下:

from app import db

class User(db.Model):

    id = db.Column(db.Integer, primary_key=True)

    user_name = db.Column(db.String)

    password = db.Column(db.String)

1.3 創(chuàng)建數(shù)據(jù)庫(kù)和表

運(yùn)行 Flask 應(yīng)用,然后在終端中輸入flask shell命令,進(jìn)入 Python 交互環(huán)境

如下所示:

>>> from app import db  # 從app.py中導(dǎo)入db實(shí)例

>>> from model import *  # 從model.py中導(dǎo)入所有模型類

>>> db.create_all()  # 用db.create_all()創(chuàng)建數(shù)據(jù)庫(kù)表 

執(zhí)行完之后,會(huì)在項(xiàng)目根目錄生成一個(gè)data.db庫(kù)文件。 注意: 數(shù)據(jù)庫(kù)和表一旦創(chuàng)建后,之后對(duì)模型類的改動(dòng)不會(huì)自動(dòng)作用到實(shí)際的表中,比如,在模型類中添加或刪除字段,修改字段的名稱和類型,再次調(diào)用db.create_all()不會(huì)重新創(chuàng)建表或是更新表,只有通過(guò)db.drop_all()刪除數(shù)據(jù)庫(kù)中所有的表之后再調(diào)用db.create_all()才能重新創(chuàng)建表,

那么就會(huì)出現(xiàn)這么一個(gè)問(wèn)題:

這樣操作的話,數(shù)據(jù)庫(kù)表被刪除重建了,那表中原有的數(shù)據(jù)也都沒(méi)有了,這肯定是不行的,這時(shí)就出現(xiàn)了數(shù)據(jù)庫(kù)遷移的概念,先留個(gè)坑,下篇文章介紹。

1.4 數(shù)據(jù)庫(kù)操作

現(xiàn)在我們創(chuàng)建了模型,也生成了數(shù)據(jù)庫(kù)和表,接下來(lái)就來(lái)學(xué)習(xí)一下常用的數(shù)據(jù)庫(kù)操作。數(shù)據(jù)庫(kù)操作主要是CRUDCreate 創(chuàng)建、Read 讀取/查詢、 Update 更新、Delete 刪除)。

1.4.1 Create

添加一條記錄到數(shù)據(jù)庫(kù)中,主要分為以下三步:

  • 使用 Python 模型類創(chuàng)建對(duì)象作為一條記錄
  • 添加新創(chuàng)建的對(duì)象到數(shù)據(jù)庫(kù)會(huì)話中
  • 提交數(shù)據(jù)庫(kù)會(huì)話

如下,在上面的交互環(huán)境下,創(chuàng)建一個(gè)新用戶:

>>> from app import db  # 從app.py中導(dǎo)入db實(shí)例

>>> from model import User   # 導(dǎo)入模型類User

>>> user1=User(user_name='tigeriaf', password='123456')  # 創(chuàng)建用戶1

>>> user2=User(user_name='admin', password='123456')  # 創(chuàng)建用戶2

# 添加新創(chuàng)建的對(duì)象到數(shù)據(jù)庫(kù)會(huì)話中

>>> db.session.add(user1)

>>> db.session.add(user2)

# 將數(shù)據(jù)庫(kù)會(huì)話提交,數(shù)據(jù)寫(xiě)入data.db文件

>>> db.session.commit()

# 測(cè)試

>>> print(user1.id)

1

>>> print(user2.id)

2

另外,除了依次調(diào)用add()方法添加記錄,也可以使用add_all()一次添加包含多個(gè)模型類對(duì)象的列表。

1.4.2 Read

使用模型類

提供的 query 屬性 通過(guò)模型類提供的 query 屬性附加調(diào)用各種過(guò)濾方法可以查詢數(shù)據(jù)庫(kù)表的數(shù)據(jù),

查詢模式如下:

<模型類>.query.<過(guò)濾方法>.<查詢方法>

從某個(gè)模型類出發(fā),通過(guò)在 query 屬性對(duì)應(yīng)的 Query 對(duì)象上附加的過(guò)濾方法和查詢函數(shù)對(duì)模型類對(duì)應(yīng)的表中的記 進(jìn)行各種篩選等,最終返回包含對(duì)應(yīng)數(shù)據(jù)庫(kù)記錄數(shù)據(jù)的模型類實(shí)例,對(duì)返回的實(shí)例調(diào)用屬性即可獲取對(duì)應(yīng)的字段數(shù)據(jù)。

# 查詢?nèi)?

>>> User.query.all()

[<User 1>, <User 2>]

# 查詢指定id的記錄

>>> user1=User.query.get(1)

>>> user1.user_name

'tigeriaf'

# 查詢條數(shù)

>>> User.query.count()

2

# 查詢user_name為admin的用戶

>>> User.query.filter_by(user_name='admin').all()

[<User 2>]

SQLAlcherny 提供了很多過(guò)濾方法,使用這些過(guò)濾方法可以獲取更精確的查詢,這里就不展開(kāi)了。 完整的查詢、過(guò)濾方法可以查看:The Query Object。

1.4.3 Update

更新一條記錄非常簡(jiǎn)單,直接給模型類的屬性附上新的值,然后調(diào)用commit()方法提交會(huì)話即可。 如下,修改 id 2 的用戶的用戶名 user_name。

>>> user2=User.query.get(2)

>>> user2.user_name

'admin'

>>> user2.user_name='張三'

>>> db.session.commit()

>>> user2.user_name

'張三'

1.4.4 Delete

使用delete()進(jìn)行數(shù)據(jù)記錄的刪除,如下:

>>> db.session.delete(user2)

>>> db.session.commit()

>>> user2=User.query.get(2)

>>> print(user2)

None

1.4.5 在視圖函數(shù)里操作數(shù)據(jù)庫(kù)

在視圖函數(shù)里操作數(shù)據(jù)庫(kù)的方式在 Python Shell 交互環(huán)境下大致是相同的,無(wú)非就是多了從請(qǐng)求對(duì)象獲取數(shù)據(jù)及驗(yàn)證數(shù)據(jù)的步驟,

如下一個(gè)案例:

@app.route('/user', methods=['GET', 'POST'])

def user():

    if request.method == 'POST':

        user_name = request.form['user_name']

        password = request.form['password']

        user = User(user_name=user_name, password=password)

        db.session.add(user)

        db.session.commit()

        return 'user:{} add success! id:{}'.format(user_name, user.id)

    else:

        user_id = request.args.get('user_id')

        user = User.query.get(user_id)

        if user:

            return 'Hello user:{}!'.format(user.user_name)

        else:

            return 'failed'

上述代碼中,視圖函數(shù) user 接受兩種方式的請(qǐng)求,分別完成添加用戶、查詢用戶的功能,將接收數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中。

發(fā)送請(qǐng)求測(cè)試如下:

到此這篇關(guān)于 Flask 數(shù)據(jù)庫(kù)集成的介紹的文章就介紹到這了,更多相關(guān) Flask 數(shù)據(jù)庫(kù)集成內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中的代碼異常處理你掌握了嗎

    Python中的代碼異常處理你掌握了嗎

    Python?使用稱為異常(exception)的特殊對(duì)象來(lái)管理程序執(zhí)行期間發(fā)生的錯(cuò)誤,那Python中代碼異常處理的相關(guān)操作你都了解了嗎,本文為大家進(jìn)行了詳細(xì)整理,需要的可以參考下
    2023-06-06
  • python批量創(chuàng)建指定名稱的文件夾

    python批量創(chuàng)建指定名稱的文件夾

    這篇文章主要為大家詳細(xì)介紹了python批量創(chuàng)建指定名稱的文件夾,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • python讀取ini配置文件過(guò)程示范

    python讀取ini配置文件過(guò)程示范

    這篇文章主要介紹了python讀取ini配置文件過(guò)程示范,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 基于python時(shí)間處理方法(詳解)

    基于python時(shí)間處理方法(詳解)

    下面小編就為大家?guī)?lái)一篇基于python時(shí)間處理方法(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • 如何在Python中進(jìn)行異常處理

    如何在Python中進(jìn)行異常處理

    這篇文章主要介紹了如何在Python中進(jìn)行異常處理,Python中使用用異常對(duì)象(exception object)表示異常情況,當(dāng)程序運(yùn)行遇到錯(cuò)誤后,就會(huì)觸發(fā)發(fā)異常,下文關(guān)于異常處理的相關(guān)內(nèi)容,需要的小伙伴可以參考一下
    2022-03-03
  • 淺談Python描述數(shù)據(jù)結(jié)構(gòu)之KMP篇

    淺談Python描述數(shù)據(jù)結(jié)構(gòu)之KMP篇

    這篇文章主要介紹了Python描述數(shù)據(jù)結(jié)構(gòu)之KMP篇,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • pygame播放視頻并實(shí)現(xiàn)音視頻同步的解決方案

    pygame播放視頻并實(shí)現(xiàn)音視頻同步的解決方案

    本篇提供了pygame播放視頻的兩個(gè)方案,第一個(gè)方案是網(wǎng)上找的現(xiàn)成的,第二個(gè)方案則是參考了opencv(主流方案)自己逆向思維做的,還未經(jīng)過(guò)實(shí)際驗(yàn)證,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • 利用python 更新ssh 遠(yuǎn)程代碼 操作遠(yuǎn)程服務(wù)器的實(shí)現(xiàn)代碼

    利用python 更新ssh 遠(yuǎn)程代碼 操作遠(yuǎn)程服務(wù)器的實(shí)現(xiàn)代碼

    這篇文章主要介紹了利用python 更新ssh 遠(yuǎn)程代碼 操作遠(yuǎn)程服務(wù)器的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2018-02-02
  • Python基礎(chǔ)常用內(nèi)建函數(shù)圖文示例解析

    Python基礎(chǔ)常用內(nèi)建函數(shù)圖文示例解析

    這篇文章主要為大家Python常用內(nèi)建函數(shù),文中通過(guò)圖例詳細(xì)的給大家作出了講解分析,有需要的朋友可以借鑒參考下,希望可以有所幫助
    2021-09-09
  • Pytorch之tensorboard無(wú)法啟動(dòng)和顯示問(wèn)題及解決

    Pytorch之tensorboard無(wú)法啟動(dòng)和顯示問(wèn)題及解決

    這篇文章主要介紹了Pytorch之tensorboard無(wú)法啟動(dòng)和顯示問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09

最新評(píng)論