SQLAlchemy查询


结果查询:

  •  from databases.wechat import User
    from config import session def search():
    result = session.query(User).all() # 查询所有
    result = result[0] # 索引取值
    print(result.username) # 对象属性查询
    session.query(User).first() # 查询第一条 session.query(User).filter(User.username == 'bob').all() # 按条件查询所有 if __name__ == '__main__':
    search()
  • all() :
    • 查询所有
    • 返回一个列表对象
  • first()
    • 查询第一个符合条件的对象
    • 返回一个对象
  • 索引取值
    • 相当于列表取值
    • 返回一个列表内的值(对象)
  • 条件查询:
    • 用fillter方法来增加查询条件
  • 属性查询:
    • 直接该属性的对象对其进行普通的类属性的调用即可

条件查询

  •  from databases.wechat import User
    from config import session def search():
    # query接收一个查询范围,fillter增加查询条件的约束
    result = session.query(User.username).filter(User.username=='bob').all() # [('bob',)]
    result = session.query(User.username).filter_by(username='bob').all() # [('bob',)]
    """
    fillter和filter_by
    fillter可以进行比较运算(==, >, < ...)来对条件进行灵活的运用, 不同的条件用','(逗号)分割
    fillter_by只能指定参数传参来获取查询结果
    """ if __name__ == '__main__':
    search()
    query接收一个查询范围多个范围用逗号隔开,fillter增加查询条件的约束
    fillter和filter_by
    fillter可以进行比较运算(==, >, < ...)来对条件进行灵活的运用, 不同的条件用','(逗号)分割
    fillter_by只能指定参数传参来获取查询结果

模糊查询

  •  from databases.wechat import User
    from config import session def search():
    # like里面传入一个字符串,不确定的位置用%代替即可
    result = session.query(User.username).filter(User.username.like('b%')).all() # [('bob',)]
    # notlike取like的取反结果
    result = session.query(User.username).filter(User.username.notlike('b%')).all()
    # is_ 相当于 ==
    result = session.query(User.username).filter(User.username.is_(None)).all()
    result = session.query(User.username).filter(User.username == None).all()
    # isnot 相当于 !=
    result = session.query(User.username).filter(User.username.isnot(None)).all()
    result = session.query(User.username).filter(User.username != None).all()
    # in_传入一个可迭代对象,对前面的username进行约束, notin_ 和in_取反
    result = session.query(User.username).filter(User.username.in_(['bob', 'ivy1'])).all()
    result = session.query(User.username).filter(User.username.notin_(['bob', 'ivy1'])).all()
    # limit 限制数量查询, limit里传入一个整型来约束查看的数量, 当limit里面的参数大于实例表中的数量时,会返回所有的查询结果
    result = session.query(User.username).limit(6).all()
    # offset 偏移量查询,offset中传入一个整型,从表中的该位置开始查询,offset可以和limit混用来进行限制
    result = session.query(User.username).offset(1).all()
    result = session.query(User.username).offset(1).limit(6).all()
    # slice 切片查询,遵循左闭右开原则,可以和offset、limit混用
    result = session.query(User.username).slice(1, 3).offset(2).limit(6).all()
    # one 获取查询对象的一条,且查询的结果有且仅有一条,但查询结果多了的时候会报错
    result = session.query(User.username).filter_by(username='bob').one() if __name__ == '__main__':
    search()
  • like里面传入一个字符串,不确定的位置用%代替即可
  • notlike取like的取反结果
  • is_ 相当于 ==
  • isnot 相当于 !=
  • in_传入一个可迭代对象,对前面的username进行约束, notin_ 和in_取反
  • limit 限制数量查询, limit里传入一个整型来约束查看的数量, 当limit里面的参数大于实例表中的数量时,会返回所有的查询结果
  • offset 偏移量查询,offset中传入一个整型,从表中的该位置开始查询,offset可以和limit混用来进行限制
  • slice 切片查询,遵循左闭右开原则,可以和offset、limit混用
  • one 获取查询对象的一条,且查询的结果有且仅有一条,但查询结果多了的时候会报错
  •  from databases.wechat import User
    from config import session
    from sqlalchemy import desc def search():
    # 升序排列
    result = session.query(User.username, User.id).order_by(User.id).all()
    # 降序排列
    result = session.query(User.username, User.id).order_by(desc(User.id)).all()
    # 结合filter查询
    result = session.query(User.username, User.id).order_by(User.id).filter(User.username != 'bob').all()
    result = session.query(User.username, User.id).filter(User.username != 'bob').order_by(User.id).all() if __name__ == '__main__':
    search()

    排序查询,排序查询可结合filter、limit、slice等综合运用

 

聚合函数

  •  from databases.wechat import User
    from databases.config import session
    from sqlalchemy import func, extract def search():
    # count
    result = session.query(User.password, func.count(User.id)).group_by(User.password).all()
    # sum
    result = session.query(User.password, func.sum(User.id)).group_by(User.password).all()
    # max
    result = session.query(User.password, func.max(User.id)).group_by(User.password).all()
    # min
    result = session.query(User.password, func.min(User.id)).group_by(User.password).all()
    # having
    result = session.query(User.password, func.count(User.id)).group_by(User.password).having(func.count(User.id) > 1).all()
    # label extract
    result = session.query(
    extract('minute',User.create_time).label('minute'),
    func.count(User.id)
    ).group_by('minute')
    # 想当于-->SELECT EXTRACT(minute FROM user.create_time) AS minute, count(user.id) AS count_1 FROM user GROUP BY minute if __name__ == '__main__':
    search()

多表查询

  •  from databases.config import Base
    from sqlalchemy import Column, Integer, String, DateTime, Boolean, ForeignKey
    from datetime import datetime class User(Base):
    __tablename__ = 'user'
    id = Column(Integer, primary_key=True, autoincrement=True)
    username = Column(String(20))
    password = Column(String(20))
    create_time = Column(DateTime, default=datetime.now())
    is_login = Column(Boolean, default=False, nullable=False) class UserDetails(Base):
    __tablename__ = 'userdetails'
    id = Column(Integer, primary_key=True, autoincrement=True)
    id_card = Column(Integer, nullable=True, unique=True)
    last_login = Column(DateTime)
    login_num = Column(Integer, default=0)
    user_id = Column(Integer, ForeignKey('user.id')) # user.id 表名+属性名 if __name__ == '__main__':
    Base.metadata.create_all()

    新建表

  •  from databases.wechat import User, UserDetails
    from databases.config import session def search():
    # 笛卡尔连接
    result = session.query(User, UserDetails)
    # SELECT user.id AS user_id, user.username AS user_username, user.password AS user_password, user.create_time AS user_create_time, user.is_login AS user_is_login, userdetails.id AS userdetails_id, userdetails.id_card AS userdetails_id_card, userdetails.last_login AS userdetails_last_login, userdetails.login_num AS userdetails_login_num, userdetails.user_id AS userdetails_user_id FROM user, userdetails
    # 加filter查询
    result = session.query(User, UserDetails).filter(UserDetails.id==User.id).all()
    result = session.query(User.username, UserDetails.id_card).join(UserDetails, UserDetails.id==User.id).filter(UserDetails.id==User.id)
    # SELECT user.username AS user_username, userdetails.id_card AS userdetails_id_card FROM user INNER JOIN userdetails ON userdetails.id = user.id WHERE userdetails.id = user.id if __name__ == '__main__':
    search()

原生sql查询

  •  from databases.config import session
    
     def search():
    sql = 'select * from user '
    result = session.execute(sql)
    result.fetchone()
    result.fetchmany()
    result.fetchone() if __name__ == '__main__':
    search()

SQLAlchemy查询的更多相关文章

  1. tornado 07 数据库—ORM—SQLAlchemy—查询

    tornado 07 数据库—ORM—SQLAlchemy—查询 引言 #上节课使用query从数据库查询到了结果,但是query返回的对象是直接可用的吗 #在query.py内输入一下内容 from ...

  2. sqlalchemy 查询姿势总结

    sqlalchemy查询使用 1.带条件查询 查询是最常用的,对于各种查询我们必须要十分清楚,首先是带条件的查询 #带条件查询 rows = session.query(User).filter_by ...

  3. SQLAlchemy04 /SQLAlchemy查询高级

    SQLAlchemy04 /SQLAlchemy查询高级 目录 SQLAlchemy04 /SQLAlchemy查询高级 1.排序 2.limit.offset和切片操作 3.懒加载 4.group_ ...

  4. SQLAlchemy(四):SQLAlchemy查询高级

    目录 SQLAlchemy04 /SQLAlchemy查询高级 1.排序 2.limit.offset和切片操作 3.懒加载 4.group_by 5.having 6.join 7.subquery ...

  5. 把SQLAlchemy查询对象转换成字典

    1-假设查出来的为单个对象 1-1 在model.py中为模型对象添加字典转换函数: from exts import db class User(db.Model): __tablename__ = ...

  6. sqlalchemy查询结果类型简析

    Sqlalchemy的查询方式有很多种,例如可以查询全部,可以查询符合条件的,可以查询指定字段的.那么这么多种查询,返回的结果是不是一样的呢?作本文记录分析结果. Sql_forengin.py #c ...

  7. 把SQLAlchemy查询对象转换成字典/json使用(分开)

    注:针对的是查询出来的是单条对象 多个对象的话可以使用for循环遍历查询出来的对象列表,也可以使用下面的方法 1.config.py文件 #!/usr/bin/env python #-*- codi ...

  8. 几种常见sqlalchemy查询:

        #简单查询     print(session.query(User).all())     print(session.query(User.name, User.fullname).all ...

  9. 利用sqlalchemy 查询视图

    这个问题 google 百度 中英文搜了一上午.最新的回答还是 7年前.最后自己靠着官方文档的自己改出来一个比较方便的方法 使用环境 python == 3.7.0 SQLAlchemy === 1. ...

随机推荐

  1. 手写redux方法以及数组reduce方法

    reduce能做什么? 1)求和 2)计算价格 3)合并数据 4)redux的compose方法 这篇文章主要内容是什么? 1)介绍reduce的主要作用 2)手写实现reduce方法 0)了解red ...

  2. 配置GitLab或Git环境之教程

    配置GitLab或Git环境之教程 1.安装好Git后,首先打开开始菜单的所有程序里面的git文件夹,打开Git Bash/ ​ 2.弹出的命令行里面输入ssh-keygen 输入y,一直Enter ...

  3. JAVA正则-检验QQ是否合法

    /* * 0不能开头,全数字,位数5-10位 * 123456 */ public static void checkQQ(){ String QQ = " 123456 "; / ...

  4. CF1324A Yet Another Tetris Problem 题解

    原题链接 简要题意: 再简要一波: 每次可以把一个数增加 \(2\),问最后能不能让所有数相等.(也就是抵消掉) 什么?题意变成这样子还做个啥? 你会发现,必须所有数的奇偶性都相同,才可以:反之就不可 ...

  5. sql-lib闯关1-10关

    闯关之前我们需要搭建所需环境SQLi-Labs SQLi-Labs是一个专业的SQL注入练习平台,该平台包含了以下在测试场景中常见的注入类型: 1.报错注入(联合查询) ​     1)字符型 ​   ...

  6. mysql打开general log的办法

    mysql打开general log的办法   mysql打开general log之后,所有的查询语句都可以在general log 文件中以可读的方式得到,但是这样general log文件会非常 ...

  7. CF 1012C Dp

    Welcome to Innopolis city. Throughout the whole year, Innopolis citizens suffer from everlasting cit ...

  8. 关于STM32F103系列从大容量向中容量移植的若干问题

    一.把STM32F103大容量移植到STM32F103C8T6上的步骤: 1.换启动文件 startup_stm32f10x_cl.s           ——互联型的器件 包括:STM32F105x ...

  9. OpenCV-Python 特征匹配 | 四十四

    目标 在本章中, 我们将看到如何将一个图像中的特征与其他图像进行匹配. 我们将在OpenCV中使用Brute-Force匹配器和FLANN匹配器 Brute-Force匹配器的基础 蛮力匹配器很简单. ...

  10. 使用Keras进行深度学习:(三)使用text-CNN处理自然语言(上)

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 上一篇文章中一直围绕着CNN处理图像数据进行讲解,而CNN除了处理 ...