flask-SQLAlchemy基本使用

作为数据的操作,最基本的就是增删改查

查询

常用的SQLAlchemy查询过滤器

过滤器说明
filter()把过滤器添加到原查询上,返回一个新查询
filter_by()把等值过滤器添加到原查询上,返回一个新查询
limit使用指定的值限定原查询返回的结果
offset()偏移原查询返回的结果,返回一个新查询
order_by()根据指定条件对原查询结果进行排序,返回一个新查询
group_by()根据指定条件对原查询结果进行分组,返回一个新查询

常用的SQLAlchemy查询执行器

方法说明
all() 以列表形式返回查询的所有结果
first()返回查询的第一个结果,如果未查到,返回None
first_or_404()返回查询的第一个结果,如果未查到,返回404
get()返回指定主键对应的行,如不存在,返回None
get_or_404()返回指定主键对应的行,如不存在,返回404
count()返回查询结果的数量
paginate()返回一个Paginate对象,它包含指定范围内的结果

创建表:db.create_all()
删除表:db.drop_all()

以讲师,教室,课程,单元 为例,首先需要设置ForeignKey外键约束

查询:单表查询

#返回一条
 PptAgendas.query.filter_by(name="王").first()
 PptAgendas.query.first()
 PptAgendas.query.get(1)
 PptAgendas.query.get_or_404(1)
 #返回所有
 PptAgendas.query.filter_by(name="王").all()

一条数据返回的结果为列表,且不支持jsonify,需要在model类中定义方法转下格式

    def to_json(self):
        dict = self.__dict__
        if "_sa_instance_state" in dict:
            del dict["_sa_instance_state"]
        return dict

多条通过for…in调用to_json

多表查询

通过keyword关键字搜索获取所有的单元和所属的教室名,
使用join()方法,需要先行在model类中定义ForeignKey进行关联,如果有多个外键同时关联一张表,需要在join()里进行指定关联
获取指定字段使用with_entities(),where语句写在filter()中

  Sections.query.with_entities(Sections,  Rooms.namecn).join(Rooms, Rooms.id == Sections.roomid).filter(
        or_(Sections.id.like('%' + keyword + '%'), Sections.topiccn.like('%' + keyword + '%'),
            Sections.topicen.like('%' + keyword + '%'),
            Sections.roomid.like('%' + keyword + '%')),
        not_(Sections.del == 1)).all()
        #SELECT a.*,b.namecn from sections a INNER JOIN  rooms b on
        #(a.roomid = b.id) WHERE ...

删除

先查出数据放到会话里,再通过会话进行删除

#删除
result=Room.query.filter(Room.namecn=='111').first()
db.session.delete(result)
    try:
        db.session.commit()
        #失败打印错误日志并回滚
    except Exception as e:
        db.session.rollback()
        print(e)

修改

同样先查出

result=Room.query.filter(Room.namecn=='111').first()
result.namecn= "王"
    try:
        db.session.commit()
        #失败打印错误日志并回滚
    except Exception as e:
        db.session.rollback()
        print(e)

增加

放在model对象里

result=Room(namecn="111")
db.session.add(result)
  try:
        db.session.commit()
        #失败打印错误日志并回滚
    except Exception as e:
        db.session.rollback()
        print(e)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值