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

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

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

前言:

數(shù)據(jù)庫是大多數(shù) Web 應用的基礎設施,只要想把數(shù)據(jù)存儲下來,就離不開數(shù)據(jù)庫,下面將一起學習一下如何給 Flask 應用添加數(shù)據(jù)庫支持。

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

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

我們可以使用pip install flask-sqlalchemy進行安裝。

1.1 配置Flask_SQLAlchemy

下面以 SQLite 數(shù)據(jù)庫為例,Flask-SQLAlchemy 數(shù)據(jù)庫的 url 通過配置變量SQLALCHEMY_DATABASE_URI指定,通過 Flask-SQLAlchemy 提供的 SQLAlchemy 類傳入 Flask 的實例 app,創(chuàng)建 db 實例,表示程序使用的數(shù)據(jù)庫,這個 db 對象能夠使用 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配置變量表示是否追蹤對象的修改,在此設為False。

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

所謂數(shù)據(jù)模型,就是用來映射數(shù)據(jù)庫表的 Python 類,一個數(shù)據(jù)模型類對應數(shù)據(jù)庫中的一個表,類的屬性代表數(shù)據(jù)庫表的字段。所有的模型類都需要繼承 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ù)庫和表

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

如下所示:

>>> from app import db  # 從app.py中導入db實例

>>> from model import *  # 從model.py中導入所有模型類

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

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

那么就會出現(xiàn)這么一個問題:

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

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

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

1.4.1 Create

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

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

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

>>> from app import db  # 從app.py中導入db實例

>>> from model import User   # 導入模型類User

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

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

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

>>> db.session.add(user1)

>>> db.session.add(user2)

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

>>> db.session.commit()

# 測試

>>> print(user1.id)

1

>>> print(user2.id)

2

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

1.4.2 Read

使用模型類

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

查詢模式如下:

<模型類>.query.<過濾方法>.<查詢方法>

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

# 查詢全部

>>> 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 提供了很多過濾方法,使用這些過濾方法可以獲取更精確的查詢,這里就不展開了。 完整的查詢、過濾方法可以查看:The Query Object。

1.4.3 Update

更新一條記錄非常簡單,直接給模型類的屬性附上新的值,然后調用commit()方法提交會話即可。 如下,修改 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()進行數(shù)據(jù)記錄的刪除,如下:

>>> db.session.delete(user2)

>>> db.session.commit()

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

>>> print(user2)

None

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

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

如下一個案例:

@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 接受兩種方式的請求,分別完成添加用戶、查詢用戶的功能,將接收數(shù)據(jù)存儲在數(shù)據(jù)庫中。

發(fā)送請求測試如下:

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

相關文章

  • 利用python實現(xiàn)命令行有道詞典的方法示例

    利用python實現(xiàn)命令行有道詞典的方法示例

    平常都是用終端敲, 有時候不會的詞語也懶得打開詞典了,干脆搞了個簡單的查詞命令。下面這篇文章主要給大家介紹了利用python實現(xiàn)命令行有道詞典的方法示例,需要的朋友可以參考借鑒,一起來看看吧。
    2017-01-01
  • Python Pandas學習之數(shù)據(jù)離散化與合并詳解

    Python Pandas學習之數(shù)據(jù)離散化與合并詳解

    Pandas是python的一個數(shù)據(jù)分析包,該工具是為解決數(shù)據(jù)分析任務而創(chuàng)建的。本文將通過示例詳細為大家介紹一下Pandas的數(shù)據(jù)離散化與合并,需要的可以參考一下
    2022-02-02
  • Django接受前端數(shù)據(jù)的幾種方法總結

    Django接受前端數(shù)據(jù)的幾種方法總結

    下面小編就為大家?guī)硪黄狣jango接受前端數(shù)據(jù)的幾種方法總結。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • pandas讀取中文xlsx文件出現(xiàn)的問題

    pandas讀取中文xlsx文件出現(xiàn)的問題

    這篇文章主要介紹了pandas讀取中文xlsx文件出現(xiàn)的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python項目管理的利器Poetry的使用

    Python項目管理的利器Poetry的使用

    在?Python?項目開發(fā)中,包管理、依賴管理和虛擬環(huán)境的創(chuàng)建一直是開發(fā)者們經(jīng)常面對的難題,本文主要介紹了Python項目管理的利器Poetry的使用,具有一定的參考價值,感興趣的可以了解一下
    2025-04-04
  • 在Linux命令行中運行Python腳本的流程步驟

    在Linux命令行中運行Python腳本的流程步驟

    Python是一種高級編程語言,被廣泛應用于數(shù)據(jù)科學、機器學習、Web 開發(fā)等領域,在Linux操作系統(tǒng)中,Python是一個默認安裝的解釋器,用戶可以通過命令行界面(CLI)來運行Python腳本,在本文中,我們將詳細介紹如何在Linux命令行中運行Python腳本,需要的朋友可以參考下
    2023-11-11
  • Django中的forms組件實例詳解

    Django中的forms組件實例詳解

    這篇文章主要介紹了Django的forms組件,本文通過實例代碼介紹了Django的forms組件,需要的朋友可以參考下
    2018-11-11
  • Python列表list操作相關知識小結

    Python列表list操作相關知識小結

    今天,本喵帶大家仔細溫習一下Python的列表,溫故而知新,不亦說乎,需要的朋友可以參考下
    2020-01-01
  • pytorch無坑安裝CPU版小白教程(配gpu版鏈接、conda命令教程)

    pytorch無坑安裝CPU版小白教程(配gpu版鏈接、conda命令教程)

    pip安裝無論是cpu還是gpu的pytorch安裝,其實官方給了很好的安裝流程,本文主要介紹了pytorch無坑安裝CPU版小白教程,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Python Thread虛假喚醒概念與防范詳解

    Python Thread虛假喚醒概念與防范詳解

    這篇文章主要介紹了Python Thread虛假喚醒概念與防范,虛假喚醒是一種現(xiàn)象,它只會出現(xiàn)在多線程環(huán)境中,指的是在多線程環(huán)境下,多個線程等待在同一個條件上,等到條件滿足時,所有等待的線程都被喚醒,但由于多個線程執(zhí)行的順序不同
    2023-02-02

最新評論

栾川县| 延长县| 寿光市| 嘉荫县| 赫章县| 荥经县| 米易县| 阳东县| 微山县| 连平县| 鹤峰县| 双辽市| 托里县| 金沙县| 邹平县| 竹溪县| 白山市| 华坪县| 吉水县| 赤峰市| 鲁甸县| 大名县| 漳浦县| 安仁县| 银川市| 镇原县| 耿马| 应城市| 江油市| 和静县| 环江| 德安县| 剑川县| 美姑县| 玛多县| 册亨县| 肃北| 桑日县| 广安市| 文昌市| 韶山市|