Flask应用基础入门总结

【1】使用migrate方式进行数据库连接

使用migrate方式进行数据库连接需要在终端分别运行三行代码:

python 复制代码
#init(运行一次即可)(此db为自己设置的连接数据库的对象,可以修改)
flask db init
#(将orm模型生成迁移脚本)
flask db migrate
#(将迁移脚本映射到数据库中)
flask db upgrade 

① flask db init

执行结果为生成migrations文件夹:

② flask db migrate

python 复制代码
#(将orm模型生成迁移脚本)
flask db migrate

如下所示这里会生成850b7054a4f6_.py,其实也就是数据模型(数据库表)迁移脚本。

这时查看数据库只有一个表alembic_verison,并且是空的。

③ flask db upgrade

执行迁移脚本,创建数据表并设置版本号。

python 复制代码
#(将迁移脚本映射到数据库中)
flask db upgrade 

【2】jinja2的使用

几个标签说明:

python 复制代码
{% ... %}是声明标签
{{ ... }} 是打印输出表达式文本结果的标签
{# ... #} 用于注释,但是不会输出到结果文件中

① for 和 if 动态渲染select

python 复制代码
<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循环内部使用说明:

python 复制代码
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引入模板文件

如下所示在我们页面可以引入公共文件:

python 复制代码
{% include 'system/common/header.html' %}
//这里为页面主体部分
{% include 'system/common/footer.html' %}

③ 表单回显

如下所示,在渲染模板的时候带回数据,那么在表单页面通过{``{ }}即可回显。

python 复制代码
@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一样)

html 复制代码
<input type="text" value="{{ repair.id }}" name="id"  class="layui-input">

textarea 回显如下:

html 复制代码
<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/

① 保存对象

python 复制代码
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()方法来提交数据的修改。

更新单个对象

python 复制代码
room = Room.query.get(roomOrder.room_id)
room.curr_num = room.curr_num - 1
db.session.commit()

批量更新对象

python 复制代码
RoomOrder.query.filter_by(id=id).update({'state': 0})
db.session.commit()

③ 删除对象

删除单个对象

python 复制代码
room = Room.query.get(roomOrder.room_id)
db.session.delete(room )
db.session.commit()

批量删除对象

python 复制代码
res = RoomOrder.query.filter_by(name='一教').delete()
db.session.commit()

④ 查询数据

查询所有记录

python 复制代码
# 查询所有记录
datas= RoomOrder.query.all()

条件查询

python 复制代码
# 条件查询
data= RoomOrder.query.filter_by(name='一教').first()

排序查询

python 复制代码
# 排序查询(升序)
datas= RoomOrder.query.order_by(RoomOrder.id.desc()).all() #asc()升序
相关推荐
dFObBIMmai10 分钟前
Python Celery任务队列怎么配_实现Web后台异步任务调度处理
jvm·数据库·python
南宫萧幕11 分钟前
Python与Simulink联合仿真:基于DQN的HEV能量管理策略建模与全链路排雷实战
开发语言·人工智能·python·算法·机器学习·matlab·控制
千寻girling17 分钟前
滑动窗口刷了快一个月(26天)了 , 还没有刷完. | 含(操作系统学什么的Java 后端)
java·开发语言·javascript·c++·人工智能·后端·python
WL_Aurora19 分钟前
备战蓝桥杯国赛【day3】
python·蓝桥杯
码农阿豪22 分钟前
Python 操作金仓数据库的完全指南(下篇):SQL执行、批量操作与扩展功能
数据库·python·sql
曲幽25 分钟前
用了loguru我才明白,Python日志还能这么写
python·logging·fastapi·web·async·loguru·handler·uvicorn
小糖学代码26 分钟前
LLM系列:2.pytorch入门:9.神经网络的学习
人工智能·python·深度学习·神经网络·学习·机器学习
曾凡玉@28 分钟前
Python 并发编程系统笔记
开发语言·笔记·python
测试199840 分钟前
接口测试工具:Postman的高级用法
自动化测试·软件测试·python·测试工具·测试用例·接口测试·postman