国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

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

這篇具有很好參考價(jià)值的文章主要介紹了flask數(shù)據(jù)庫(kù)操作。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

flask數(shù)據(jù)庫(kù)操作,flask,python,flask,數(shù)據(jù)庫(kù),python

本文將詳細(xì)介紹在Flask Web應(yīng)用中如何設(shè)計(jì)數(shù)據(jù)庫(kù)模型,并使用Flask-SQLAlchemy等擴(kuò)展進(jìn)行數(shù)據(jù)庫(kù)操作的最佳實(shí)踐。內(nèi)容涵蓋數(shù)據(jù)模型設(shè)計(jì),ORM使用,關(guān)系映射,查詢方法,事務(wù)處理等方面。通過(guò)本文,您可以掌握Flask數(shù)據(jù)庫(kù)應(yīng)用的基本知識(shí)。

Flask作為一個(gè)流行的Python Web框架,提供了高度的靈活性來(lái)構(gòu)建Web應(yīng)用程序。但是Flask本身不包含數(shù)據(jù)庫(kù)抽象層,所以我們需要選擇合適的數(shù)據(jù)庫(kù)工具來(lái)輔助開(kāi)發(fā)。

1. 數(shù)據(jù)庫(kù)工具選擇

要在Flask中集成數(shù)據(jù)庫(kù)操作,我們通常有以下幾種選擇:

  • 原生SQL:直接使用Python中的DBAPI,如MySQL-Python等,編寫(xiě)SQL語(yǔ)句操作數(shù)據(jù)庫(kù)。但這需要自行處理許多細(xì)節(jié)。

  • SQLAlchemy:這是一個(gè)非常強(qiáng)大的ORM框架,可以映射Python對(duì)象到數(shù)據(jù)庫(kù)表,簡(jiǎn)化數(shù)據(jù)庫(kù)操作。推薦用于復(fù)雜項(xiàng)目。

  • Flask-SQLAlchemy:這是在Flask中整合SQLAlchemy的擴(kuò)展,可以便捷地將其與Flask應(yīng)用結(jié)合使用。

  • 其他擴(kuò)展:如Flask-MongoEngine for MongoDB,Flask-Pony for PonyORM等。

考慮到SQLAlchemy提供的便利性,我們這里選擇使用Flask-SQLAlchemy來(lái)示例Flask的數(shù)據(jù)庫(kù)用法。

2. 安裝Flask-SQLAlchemy

使用pip安裝Flask-SQLAlchemy:

pip install flask-sqlalchemy

然后在Flask應(yīng)用中進(jìn)行初始化:

from flask import Flask 
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db' 
db = SQLAlchemy(app)

3. 定義模型

使用Flask-SQLAlchemy時(shí),數(shù)據(jù)庫(kù)使用ORM映射模型表示。我們可以定義代表表的Model類:

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)

    def __repr__(self):
        return '<User %r>' % self.username

User類表示users表,類的屬性映射到表的列。有PrimaryKey,Unique等約束。

4. 創(chuàng)建表

有了Model類定義,我們可以通過(guò)migrate命令創(chuàng)建對(duì)應(yīng)的數(shù)據(jù)庫(kù)表:

flask db init
flask db migrate
flask db upgrade 

這將根據(jù)Model類創(chuàng)建數(shù)據(jù)庫(kù)表。

5. CRUD操作

有了映射表,我們就可以進(jìn)行常規(guī)的CRUD操作:

創(chuàng)建

user = User(username='greyli', email='greyli@example.com')
db.session.add(user) 
db.session.commit() 

查詢

User.query.get(1) # 主鍵查詢
User.query.filter_by(username='greyli').first() # 條件查詢

更新

user = User.query.get(1)
user.username = 'new username'
db.session.commit() # 提交更新

刪除

user = User.query.get(1)
db.session.delete(user)
db.session.commit() # 提交刪除

可以看到Flask-SQLAlchemy為這些常見(jiàn)操作提供了簡(jiǎn)單的API。

6. 關(guān)系映射

關(guān)系映射也是ORM的重要功能之一。例如一篇文章可對(duì)應(yīng)多個(gè)標(biāo)簽,我們可以定義:

class Article(db.Model):
  id = db.Column(db.Integer, primary_key=True)
  title = db.Column(db.String(100), unique=True)
  tags = db.relationship('Tag', backref='article', lazy='dynamic')

class Tag(db.Model):
  id = db.Column(db.Integer, primary_key=True)
  name = db.Column(db.String(20), unique=True)

這樣Article和Tag之間就建立了一對(duì)多的關(guān)系,可以方便地查詢:

article = Article.query.get(1)
tags = article.tags

7. 事務(wù)處理

事務(wù)處理可以保證數(shù)據(jù)庫(kù)操作的完整性:

try:
  article = Article(title='my article')
  db.session.add(article)
  db.session.commit() 
except:
  db.session.rollback()
  raise

這樣可以回滾錯(cuò)誤的修改,保證事務(wù)的原子性。

補(bǔ)充

在Flask應(yīng)用中,這幾條命令是用于數(shù)據(jù)庫(kù)遷移的:

  1. flask db init

這個(gè)命令會(huì)初始化一個(gè)遷移倉(cāng)庫(kù),在migrations文件夾下創(chuàng)建必要的文件。這個(gè)遷移倉(cāng)庫(kù)用于追蹤數(shù)據(jù)庫(kù)模式的變更。

  1. flask db migrate

這個(gè)命令會(huì)自動(dòng)比對(duì)模型定義和現(xiàn)有數(shù)據(jù)庫(kù)的差異,然后生成一個(gè)遷移腳本,放在migrations/versions文件夾下。

這個(gè)遷移腳本包含了使數(shù)據(jù)庫(kù)模式達(dá)到我們模型定義的狀態(tài)所需要的操作指令(如創(chuàng)建新表,添加字段等)。

  1. flask db upgrade

這個(gè)命令則會(huì)執(zhí)行遷移倉(cāng)庫(kù)中所有的遷移腳本,實(shí)際更新數(shù)據(jù)庫(kù)模式,使數(shù)據(jù)庫(kù)與模型一致。

所以這三步命令的作用是:

  1. 初始化遷移倉(cāng)庫(kù)

  2. 生成遷移腳本

  3. 執(zhí)行遷移操作

當(dāng)我們修改了模型類的時(shí)候,只需要再次運(yùn)行:

flask db migrate
flask db upgrade

就可以自動(dòng)更新數(shù)據(jù)庫(kù),非常方便。

這樣做的好處是可以很好地追蹤數(shù)據(jù)庫(kù)模式的變遷,同時(shí)可以通過(guò)downgrade回滾變更。總體上可以更輕松地管理數(shù)據(jù)庫(kù)模式。

所以Flask強(qiáng)烈建議使用這套遷移機(jī)制來(lái)維護(hù)數(shù)據(jù)庫(kù),而不是直接修改數(shù)據(jù)庫(kù)模式。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-624945.html

到了這里,關(guān)于flask數(shù)據(jù)庫(kù)操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包