美文网首页
Python-SQLAlchemy的ORM(3)

Python-SQLAlchemy的ORM(3)

作者: 木叶苍蓝 | 来源:发表于2019-12-31 18:18 被阅读0次

来源:本文章摘抄于《知了课堂》,本人也是知了课堂的学生

相关

Python-SQLAlchemy介绍和基本使用
Python-SQLAlchemy(1)
Python-SQLAlchemy(2)
Python-SQLAlchemy(3)
Python-SQLAlchemy(4)
Python-SQLAlchemy(5)

查找方法:

介绍完过滤条件后,有些经常用到的查找数据方法也需要解释一下:

  1. all():返回一个 python 列表
  query = session.query(User).filter(User.name.like('%ed%').order_by(User.id))
  print type(query)
  # <type 'list'>
  # 调用all方法
  query = query.all()
  # 输出 query 的类型
  print type(query)
  # <class 'sqlalchemy.orm.query.Query'>

2.first():返回 Query 中的第一个值

   user = session.query(User).first()
   print user
   #<User(name='ed', fullname='Ed Jones', password='123456')>
  1. one():查找所有行为作为一个结果集,如果结果集中只有一个条数据,则会把这条数据提取出来,如果这个结果集少于或者多于一条数据,则会抛出异常。总结一句话:有且只有一条数据的时候才会正常的返回,否则抛出异常:
    # 多于一条数据
    user = query.one()
    # Traceback (most recent call last):
    # ...
    # MultipleResultsFound: Multiple rows were foundd for one()
    # 少于一条数据
    user = query.filter(User.id == 99).one()
    # Traceback (most recent call last):
    # ....
    # NoResultFound: No row was found for one()
    # 只有一条数据
    query(User).filter_by(name='ed').one()
  1. one_or_none():跟 one() 方法类似,但是在结果集中没有数据的时候也不会抛出异常。
  2. scalar():底层调用 one() 方法,并且如果 one() 方法没有抛出异常,会返回查询到的第一列的数据:
    session.query(User.name, User.fullname).filter_by(name='ed').scalar()

文本SQL:

SQLAlchemy 还提供了使文本SQL的方式来进行查询,这种方式更加的灵活。而文本SQL要装在一个text()方法中,看以下例子:

    from sqlalchemy import text
    for user in session.query(User).filter(text('id<244')).order_by(text("id"))all():
        print user.name

如果过滤条件比如上例中的244储存在变量中,这时候就可以通过传递参数的形式进行构造:

   session.query(User).filter(text("id<:value and name=:name")).params(value=224, name='ed').order_by(User.id)

使用 from_statement 方法一定要注意, from_statement 返回的是一个 text 里面的查询语句,一定要记得调用 all() 方法来获取所有的值。

计数(Count):

Query 对象有一个非常方便的方法来计算里面装了多少对象。

    session.query(User).filter(User.name.like("%ed%")).count()

当然,有时间你想明确的计数,比如要统计users表中有多少个不同的姓名,那么简单粗暴的采用以上count是不行的,因为姓名有可能会重复,但是处于两条不同的数据上,如果在原生数据库中,可以使用distinct关键字,那么在SQLAlchemy中,可以通过func.count() 方法来实现:

    from sqlalchemy import func
    session.query(func.count(User.name), User,name).group_by(User.name).all()
# 输出结果
# [(1, u'ed'), (1, u'fred'), (1, u'mary'), (1, u'wendy')]

另外,如果想实现 select count(*) from users,可以通过以下方式来实现:

    session.query(func.count(*)).select_from(User).scalar()

当然,如果指定了要查找的表的字段,可以省略 select_from() 方法:

    session.query(func.count(User.id)).scalar()

相关文章

  • Python-SQLAlchemy的ORM(3)

    来源:本文章摘抄于《知了课堂》,本人也是知了课堂的学生 相关 Python-SQLAlchemy介绍和基本使用Py...

  • Python-SQLAlchemy的ORM(5)

    来源:本文章摘抄于《知了课堂》,本人也是知了课堂的学生 相关 Python-SQLAlchemy介绍和基本使用Py...

  • Python-SQLAlchemy的ORM(4)

    来源:本文章摘抄于《知了课堂》,本人也是知了课堂的学生 相关 Python-SQLAlchemy介绍和基本使用Py...

  • Python-SQLAlchemy的ORM(1)

    来源:本文章摘抄于《知了课堂》,本人也是知了课堂的学生 相关 Python-SQLAlchemy介绍和基本使用Py...

  • Python-SQLAlchemy的ORM(2)

    来源:本文章摘抄于《知了课堂》,本人也是知了课堂的学生 相关 Python-SQLAlchemy介绍和基本使用Py...

  • Python廖雪峰实战Day3编写ORM思路整理

    Python教程链接:Day 3 - 编写ORM ORM ORM(Object Relational Mappin...

  • Model(orm)(3)

    Model Model为数据的基类,以后数据的建立都基于此,比如User,Comment,Weibo,Sessio...

  • python-sqlalchemy

    官方教程: http://docs.sqlalchemy.org/en/rel_1_0/core/engines....

  • 1. ORM框架之EntityFramework介绍

    目录 ORM框架之EntityFramework介绍1. 自我介绍2. 什么是EF?3. 什么是 ORM ?4. ...

  • Django 七

    目录 1.orm常用和非常用字段 2. orm字段参数 3.orm字段关系 4.手动创建第三张表(了解) 第一种 ...

网友评论

      本文标题:Python-SQLAlchemy的ORM(3)

      本文链接:https://www.haomeiwen.com/subject/vmhioctx.html