【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扩展。
① 保存对象
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()升序