flask-SQLAlchemy数据查询 常用命令

最常使用的SQLAlchemy列选项

  1. unique | 如果设为True,这列不允许出现重复的值
  2. primary_key | 如果设为True,这列就是表的主键
  3. index | 如果设为True,为这列创建索引,提升查询效率
  4. nullable | 如果设为True,这列允许使用空值,False则不允许使用空值
  5. default | 为这列定义默认值
  6. primary_key | 如果设为True,这列就是表的主键

一对多关系

  1. 添加到Variable模型中的env_id列被定义为外键,就是这个外键建立起了关系,传给db.ForeignKey()的参数’environments.id’表明,这列的值是environments.id表中行的id值。
  2. 添加到Environments模型中的variable属性代表这个关系的面向对象视角。对于一个Environments类的实例,其variable属性将返回与角色相关联的用户组成的列表
  3. db.relationship()的第一个参数表明这个关系的另一端是哪个模型
  4. db.relationship()的backref参数向Environments模型中添加一个variable属性,从而定义反向关系
  5. db.relationship()的lazy=dynamic参数表明:不加载记录,但提供加载记录的查询。
  6. default | 为这列定义默认值

常用的SQLAlchemy查询执行器

在这里插入图片描述

常用的SQLAlchemy查询过滤器

在这里插入图片描述

注意

  • 查询过滤器返回的都是 BaseQuery类型对象, 该对象支持链式调用, 即可以续接其他过滤器 或 执行器
  • 如果考虑到性能优化, 应该避免 select *, 只查询需求字段 (select * 会导致数据库服务器去获取&解析&处理目标数据的每个字段, 对服务器资源造成浪费, 并且不必要的数据也会占用更多的 网络IO 和 数据库查询缓存)

实例代码

   """
    查询所有用户数据
    User.query.all()

    查询有多少个用户
    User.query.count()

    查询第1个用户
    User.query.first()
    User.query.get(1)   # 根据id查询

    查询id4的用户[3种方式]
    User.query.get(4)
    User.query.filter_by(id=4).all()   # 简单查询  使用关键字实参的形式来设置字段名
    User.query.filter(User.id == 4).all()  # 复杂查询  使用恒等式等其他形式来设置条件

    查询名字结尾字符为g的所有用户[开始 / 包含]
    User.query.filter(User.name.endswith("g")).all()
    User.query.filter(User.name.startswith("w")).all()
    User.query.filter(User.name.contains("n")).all()
    User.query.filter(User.name.like("%n%g")).all()  模糊查询

    查询名字和邮箱都以li开头的所有用户[2种方式]
    User.query.filter(User.name.startswith("li"), User.email.startswith("li")).all()

    from sqlalchemy import and_
    User.query.filter(and_(User.name.startswith("li"), User.email.startswith("li"))).all()

    查询age是25 或者 `email`以`itheima.com`结尾的所有用户
    from sqlalchemy import or_
    User.query.filter(or_(User.age == 25, User.email.endswith("itheima.com"))).all()

    查询名字不等于wang的所有用户[2种方式]
    from sqlalchemy import not_
    User.query.filter(not_(User.name == "wang")).all()
    User.query.filter(User.name != "wang").all()

    查询id[1, 3, 5, 7, 9]的用户
    User.query.filter(User.id.in_([1, 3, 5, 7, 9])).all()

    所有用户先按年龄从小到大, 再按id从大到小排序, 取前5个
    User.query.order_by(User.age, User.id.desc()).limit(5).all()

    分页查询, 每页3, 查询第2页的数据
    pn = User.query.paginate(2, 3)
    pn.items  获取该页的数据     pn.page   获取当前的页码     pn.pages  获取总页数

1、创建表
>>> db.create_all()
2、删除表
>>> db.drop_all()

3、插入行

#将variable添加到会话中

>>>db.session.add(variable)

#commit()方法提交会话

>>>db.session.commit()

4、 查询数据

(1all(查询全部数据)

Environments.query.all()2)filter_by查询(精确查询)

Environments.query.filter_by(id=id).first()3)join(联表一对多查询)

Variable.query.filter_by(env_id=env_id,id=id).join(Environments,Variable.env_id == Environments.id).first_or_404()4)count(返回查询结果的数量)

Environments.query.filter_by(id=id).count()

5、删除数据

db.session.delete(variablelists)

db.session.commit()

6、删除多条数据

variablelists= Variable.query.filter_by(env_id=env_id).all()

for var in variablelists:

    db.session.delete(var)
    
db.session.commit()


  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值