
作用:增删改查数据库
参考:https://www.imooc.com/article/details/id/22343
参考:https://www.cnblogs.com/shangerzhong/articles/10381793.html
#真正的数据库,蓝图过来的from app import db
article = Article(username=username, age=age)db.session.add(article)db.session.commit()
查order.state = "1" #修改数据db.session.commit()
查-改同步-边查边改synchronize_session="evaluate"ITtable.query.filter(ITtable.id >= id).update({"id": ITtable.id + 1}, synchronize_session="evaluate")db.session.commit()
表类名.查.已知信息.条件.限制.数量User.query.filter_by(name="小明").order_by(User.id.desc()).limit(50).all()
filter_by()——简单搜索filter_by(name="小明")
filter()——复杂搜索
# 其他表filter_by(User2.name="小明")# 有相似filter_by(User.name.like("%小%"))# 非 ! 不等于filter_by(User.sex !="男")# 与或#flask-sqlalchemy同字段多条件的过滤方法from operator import and_,or_filter(and_(User.name.like("小%"), User.fullname.like("first%"))).all())filter(or_(User.name.like("小%"), User.password != None)).all())# 注意:要用==,不能是=# 空值filter(User.name == None)filter(User.name != None)# 超多条件map = []map.append(Accident.route_id == 1)filter(*map)# 列表user_list_in_ = User.query.filter(User.phone.in_(["123","456"],)).all()
顺序order_by(User.id)order_by("id")倒序order_by(-User.id)order_by("-id")
50代表数量
a = db.session.execute("select * from user")db.session.commit()data = list(a) # 最好转成list这样才可以多次使用a.fetchone().xxx # 取值a.fetchall().xxx
.count()
可能有两个或多个操作
前一个操作成功
后一个可能操作错误
导致数据发生混乱
事务就是全都没问题才提交到数据库
一般是另起一个方法管理这个逻辑
def new_group(cls, form):group = CaseGroup.query.filter_by(name=form.name.data, delete_time=None).first()if group is not None:raise ParameterException(msg="分组已存在")# 新增分组的时候同时新增可查看当前用例组的人员。当出现问题时进行回滚,人员和分组都不插入try:group = CaseGroup()group.name = form.name.datagroup.info = form.info.datadb.session.add(group)db.session.flush()if form.users.data:current_app.logger.info(group.id)for user in form.users.data:user_auth = UserAuth()user_auth.user_id = useruser_auth.auth_id = group.iduser_auth.type = UserAuthEnum.GROUPdb.session.add(user_auth)db.session.commit()except Exception as e:db.session.rollback()raise UnknownException(msg="新增异常 数据已回滚")return True
try except 将2次新增操作包裹起来
db.session.rollback()当出现异常时,进行数据回滚。
db.session.add()在一次新增后使用进行数据暂存,此时并未真正提交到数据库中
db.session.commit()需要在所有操作执行后进行数据提交。
db.session.flush()刷新获取分组id。在这个例子中,新增关联表的数据需要已新增分组数据的id,此时未commit所以自增id为None,需要在新增分组后使用