Flask使用Flask-SQLAlchemy操作MySQL數(shù)據(jù)庫(kù)

前言:

Flask-SQLAlchemy是一個(gè)Flask擴(kuò)展,簡(jiǎn)化了在Flask程序中使用SQLAlchemy的操作。SQLAlchemy是一個(gè)很強(qiáng)大的關(guān)系型數(shù)據(jù)庫(kù)框架,支持多種數(shù)據(jù)庫(kù)后臺(tái)。SQLAlchemy提供了高層ORM,也提供了使用數(shù)據(jù)庫(kù)原生SQL的低層功能。

學(xué)習(xí)了Flask-SQLAlchemy下MySQL的配置和增刪改查,供初學(xué)者作為參考。(python3+flask)


一、pip安裝擴(kuò)展庫(kù)

>>>pip3 install flask-sqlalchemy

>>>pip3 install flask-mysqldb


二、配置并初始化數(shù)據(jù)庫(kù)

SQLALCHEMY_DATABASE_URI ,配置使用的數(shù)據(jù)庫(kù)URL,而配置MySQL的URL格式為:

mysql://username:password@hostname/database

SQLALCHEMY_TRACK_MODIFICATIONS?,設(shè)置成True(默認(rèn)情況),F(xiàn)lask-SQLAlchemy 將會(huì)追蹤對(duì)象的修改并且發(fā)送信號(hào)。


三、創(chuàng)建數(shù)據(jù)庫(kù)


四、定義模型

1、最常使用的SQLAlchemy列選項(xiàng)

primary_key? ? | 如果設(shè)為True,這列就是表的主鍵

unique? ? ? ? ? ? ? ?| 如果設(shè)為True,這列不允許出現(xiàn)重復(fù)的值

index? ? ? ? ? ? ? ? ? | 如果設(shè)為True,為這列創(chuàng)建索引,提升查詢效率

nullable? ? ? ? ? ? ? | 如果設(shè)為True,這列允許使用空值,F(xiàn)alse則不允許使用空值

default? ? ? ? ? ? ? ? | 為這列定義默認(rèn)值

2、一對(duì)多關(guān)系

添加到Variable模型中的env_id列被定義為外鍵,就是這個(gè)外鍵建立起了關(guān)系。

傳給db.ForeignKey()的參數(shù)'environments.id'表明,這列的值是environments.id表中行的id值。

3、關(guān)系的面向?qū)ο笠暯?/p>

添加到Environments模型中的variable屬性代表這個(gè)關(guān)系的面向?qū)ο笠暯?。?duì)于一個(gè)Environments類的實(shí)例,其variable屬性將返回與角色相關(guān)聯(lián)的用戶組成的列表。

db.relationship()的第一個(gè)參數(shù)表明這個(gè)關(guān)系的另一端是哪個(gè)模型。

db.relationship()的backref參數(shù)向Environments模型中添加一個(gè)variable屬性,從而定義反向關(guān)系。

db.relationship()的lazy=dynamic參數(shù)表明:不加載記錄,但提供加載記錄的查詢。


五、數(shù)據(jù)庫(kù)操作

1、創(chuàng)建表

>>> db.create_all()

2、刪除表

>>> db.drop_all()

3、插入行

#將variable添加到會(huì)話中

>>>db.session.add(variable)

#commit()方法提交會(huì)話

>>>db.session.commit()

4、 查詢數(shù)據(jù)

(1)all(查詢?nèi)繑?shù)據(jù))

Environments.query.all()

(2)filter_by查詢(精確查詢)

Environments.query.filter_by(id=id).first()

(3)join(聯(lián)表一對(duì)多查詢)

Variable.query.filter_by(env_id=env_id,id=id).join(Environments,Variable.env_id == Environments.id).first_or_404()

(4)count(返回查詢結(jié)果的數(shù)量)

Environments.query.filter_by(id=id).count()

5、刪除數(shù)據(jù)

db.session.delete(variablelists)

db.session.commit()

6、刪除多條數(shù)據(jù)

variablelists= Variable.query.filter_by(env_id=env_id).all()

for var in variablelists:

????db.session.delete(var)

db.session.commit()


以上,希望對(duì)你有所幫助~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容