当前位置:   article > 正文

flask-SQLAlchemy基本使用_flask sqlalchemy with_entities

flask sqlalchemy with_entities

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

查询

常用的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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

    def to_json(self):
        dict = self.__dict__
        if "_sa_instance_state" in dict:
            del dict["_sa_instance_state"]
        return dict
  • 1
  • 2
  • 3
  • 4
  • 5

多条通过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 ...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

删除

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

#删除
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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

修改

同样先查出

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

增加

放在model对象里

result=Room(namecn="111")
db.session.add(result)
  try:
        db.session.commit()
        #失败打印错误日志并回滚
    except Exception as e:
        db.session.rollback()
        print(e)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/510811
推荐阅读
相关标签
  

闽ICP备14008679号