前言:
Flask-SQLAlchemy是一個(gè)Flask擴(kuò)展号杠,簡化了在Flask程序中使用SQLAlchemy的操作闭树。SQLAlchemy是一個(gè)很強(qiáng)大的關(guān)系型數(shù)據(jù)庫框架浴讯,支持多種數(shù)據(jù)庫后臺(tái)。SQLAlchemy提供了高層ORM蔼啦,也提供了使用數(shù)據(jù)庫原生SQL的低層功能榆纽。
學(xué)習(xí)了Flask-SQLAlchemy下MySQL的配置和增刪改查,供初學(xué)者作為參考捏肢。(python3+flask)
一奈籽、pip安裝擴(kuò)展庫
>>>pip3 install flask-sqlalchemy
>>>pip3 install flask-mysqldb
二、配置并初始化數(shù)據(jù)庫
SQLALCHEMY_DATABASE_URI 鸵赫,配置使用的數(shù)據(jù)庫URL衣屏,而配置MySQL的URL格式為:
mysql://username:password@hostname/database
SQLALCHEMY_TRACK_MODIFICATIONS?,設(shè)置成True(默認(rèn)情況)辩棒,F(xiàn)lask-SQLAlchemy 將會(huì)追蹤對象的修改并且發(fā)送信號(hào)狼忱。
三、創(chuàng)建數(shù)據(jù)庫
四一睁、定義模型
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、一對多關(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ū)ο笠暯腔讨蕖τ谝粋€(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ù)庫操作
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)表一對多查詢)
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()
以上举塔,希望對你有所幫助~