作用:增删改查数据库
参考: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.data
group.info = form.info.data
db.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 = user
user_auth.auth_id = group.id
user_auth.type = UserAuthEnum.GROUP
db.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,需要在新增分组后使用