【1】使用migrate方式進行數據庫連接
使用migrate方式進行數據庫連接需要在終端分別運行三行代碼:
#init(運行一次即可)(此db為自己設置的連接數據庫的對象,可以修改)
flask db init
#(將orm模型生成遷移腳本)
flask db migrate
#(將遷移腳本映射到數據庫中)
flask db upgrade
① flask db init
執行結果為生成migrations文件夾:
② flask db migrate
#(將orm模型生成遷移腳本)
flask db migrate
如下所示這里會生成850b7054a4f6_.py,其實也就是數據模型(數據庫表)遷移腳本。
這時查看數據庫只有一個表alembic_verison,并且是空的。
③ flask db upgrade
執行遷移腳本,創建數據表并設置版本號。
#(將遷移腳本映射到數據庫中)
flask db upgrade
【2】jinja2的使用
幾個標簽說明:
{% ... %}是聲明標簽
{{ ... }} 是打印輸出表達式文本結果的標簽
{# ... #} 用于注釋,但是不會輸出到結果文件中
① for 和 if 動態渲染select
<select name="floorId" id="floorId">{% for floor in floors %}<option value="{{ floor.id }}"{% if floor.id == room.floor_id %}selected{% endif %}>{{floor.name}}</option>{% endfor %}
</select>
for循環內部使用說明:
loop.index 當前循環的迭代。(1索引)
loop.index0 當前循環的迭代。(0索引)
loop.revindex 循環結束的迭代次數(1個索引)
loop.revindex0 循環結束的迭代次數(0索引)
loop.first 如果是第一次迭代,則為true
loop.last 如果最后一次迭代為真。
loop.length 序列中的項目數。
loop.cycle 一個輔助函數,用于在序列列表之間循環。參見下面的說明。
loop.depth 指示渲染當前處于遞歸循環的深度。從1級開始
loop.depth0 指示渲染當前處于遞歸循環的深度。從0級開始
② include引入模板文件
如下所示在我們頁面可以引入公共文件:
{% include 'system/common/header.html' %}
//這里為頁面主體部分
{% include 'system/common/footer.html' %}
③ 表單回顯
如下所示,在渲染模板的時候帶回數據,那么在表單頁面通過{{ }}
即可回顯。
@bp.get('/edit/<int:id>')
@authorize("system:repair:edit", log=True)
def edit(id):repair = curd.get_by_id(Repair, id)rooms = Room.query.all()return render_template('system/repair/edit.html', repair=repair, rooms=rooms)
輸入框回顯如下(select一樣)
<input type="text" value="{{ repair.id }}" name="id" class="layui-input">
textarea 回顯如下:
<textarea type="text" name="remark" lay-verify="required"
autocomplete="off" placeholder="請輸入報修說明" class="layui-textarea">
{{ repair.remark }}
</textarea>
【3】使用SQLAlchemy進行CRUD
flask默認提供模型操作,但是并沒有提供ORM,所以一般開發的時候我們會采用flask-SQLAlchemy模塊來實現ORM操作。
SQLAlchemy是一個關系型數據庫框架,它提供了高層的 ORM 和底層的原生數據庫的操作。
flask-sqlalchemy 是一個簡化了 SQLAlchemy 操作的flask擴展。
SQLAlchemy文檔: https://www.sqlalchemy.org/
① 保存對象
roomOrder = RoomOrder(user_id=userId, user_name=username, order_time=orderTime, remark=remark, )
db.session.add(roomOrder)
db.session.commit()
② 更新對象
在Flask-SQLAlchemy中,可以使用db.session對象的commit()方法來提交數據的修改。
更新單個對象
room = Room.query.get(roomOrder.room_id)
room.curr_num = room.curr_num - 1
db.session.commit()
批量更新對象
RoomOrder.query.filter_by(id=id).update({'state': 0})
db.session.commit()
③ 刪除對象
刪除單個對象
room = Room.query.get(roomOrder.room_id)
db.session.delete(room )
db.session.commit()
批量刪除對象
res = RoomOrder.query.filter_by(name='一教').delete()
db.session.commit()
④ 查詢數據
查詢所有記錄
# 查詢所有記錄
datas= RoomOrder.query.all()
條件查詢
# 條件查詢
data= RoomOrder.query.filter_by(name='一教').first()
排序查詢
# 排序查詢(升序)
datas= RoomOrder.query.order_by(RoomOrder.id.desc()).all() #asc()升序