激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

香港云服务器
服務(wù)器之家 - 腳本之家 - Python - Flask 數(shù)據(jù)庫集成的介紹

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

2022-03-08 00:22tigeriaf Python

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

前言:

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

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

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

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

1.1 配置Flask_SQLAlchemy

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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ù)庫模型

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

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

?
1
2
3
4
5
6
7
8
9
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ù)庫和表

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

如下所示:

?
1
2
3
4
5
>>> 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ù)庫表

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

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

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

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

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

1.4.1 Create

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
>>> 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ù)庫會(huì)話中
 
>>> db.session.add(user1)
 
>>> db.session.add(user2)
 
# 將數(shù)據(jù)庫會(huì)話提交,數(shù)據(jù)寫入data.db文件
 
>>> db.session.commit()
 
# 測試
 
>>> print(user1.id)
 
1
 
>>> print(user2.id)
 
2

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

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

1.4.2 Read

使用模型類

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

查詢模式如下:

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

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

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 查詢?nèi)?/code>
 
>>> 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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
>>> 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ù)記錄的刪除,如下:

?
1
2
3
4
5
6
7
8
9
>>> 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)境下大致是相同的,無非就是多了從請(qǐng)求對(duì)象獲取數(shù)據(jù)及驗(yàn)證數(shù)據(jù)的步驟,

如下一個(gè)案例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
@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ù)庫中。

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

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

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

原文鏈接:https://juejin.cn/post/7031700120924405773

延伸 · 閱讀

精彩推薦
1054
主站蜘蛛池模板: 国产亚洲综合精品 | 天天草夜夜骑 | 九色在线78m| 一级片a | 欧美四级在线观看 | 日本在线看 | 欧美一级黄色免费 | 免费黄色入口 | 久久人人爽人人爽人人片av高请 | 国产女同疯狂激烈互摸 | 奇米影视亚洲精品一区 | 久久成人黄色 | 久久老司机 | 国产69精品久久久久99尤 | 欧美一级做性受免费大片免费 | 国产1区2| 男男羞羞视频网站国产 | 媚药按摩痉挛w中文字幕 | 亚洲精品成人久久久 | av在线免费观看播放 | 中文字幕免费看 | 高清国产在线 | 精品人人人人 | h视频在线观看免费 | 欧美a∨亚洲欧美亚洲 | 一本色道久久综合亚洲精品图片 | 欧美视频网 | 亚洲av毛片久久久久 | www噜噜偷拍在线视频 | 国产精品久久久久久久娇妻 | chinese xvideos gay| 亚洲精品在线观看免费 | 色人阁在线视频 | 久久激情国产 | 日本最新免费二区三区 | 空姐一级毛片 | 大逼逼影院 | 羞羞视频免费网站含羞草 | 韩国三级日本三级香港三级黄 | 一级在线观看视频 | 成人在线视频网 |