SQLAlchemy查询
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查询的更多相关文章
- tornado 07 数据库—ORM—SQLAlchemy—查询
tornado 07 数据库—ORM—SQLAlchemy—查询 引言 #上节课使用query从数据库查询到了结果,但是query返回的对象是直接可用的吗 #在query.py内输入一下内容 from ...
- sqlalchemy 查询姿势总结
sqlalchemy查询使用 1.带条件查询 查询是最常用的,对于各种查询我们必须要十分清楚,首先是带条件的查询 #带条件查询 rows = session.query(User).filter_by ...
- SQLAlchemy04 /SQLAlchemy查询高级
SQLAlchemy04 /SQLAlchemy查询高级 目录 SQLAlchemy04 /SQLAlchemy查询高级 1.排序 2.limit.offset和切片操作 3.懒加载 4.group_ ...
- SQLAlchemy(四):SQLAlchemy查询高级
目录 SQLAlchemy04 /SQLAlchemy查询高级 1.排序 2.limit.offset和切片操作 3.懒加载 4.group_by 5.having 6.join 7.subquery ...
- 把SQLAlchemy查询对象转换成字典
1-假设查出来的为单个对象 1-1 在model.py中为模型对象添加字典转换函数: from exts import db class User(db.Model): __tablename__ = ...
- sqlalchemy查询结果类型简析
Sqlalchemy的查询方式有很多种,例如可以查询全部,可以查询符合条件的,可以查询指定字段的.那么这么多种查询,返回的结果是不是一样的呢?作本文记录分析结果. Sql_forengin.py #c ...
- 把SQLAlchemy查询对象转换成字典/json使用(分开)
注:针对的是查询出来的是单条对象 多个对象的话可以使用for循环遍历查询出来的对象列表,也可以使用下面的方法 1.config.py文件 #!/usr/bin/env python #-*- codi ...
- 几种常见sqlalchemy查询:
#简单查询 print(session.query(User).all()) print(session.query(User.name, User.fullname).all ...
- 利用sqlalchemy 查询视图
这个问题 google 百度 中英文搜了一上午.最新的回答还是 7年前.最后自己靠着官方文档的自己改出来一个比较方便的方法 使用环境 python == 3.7.0 SQLAlchemy === 1. ...
随机推荐
- R|tableone 快速绘制文章“表一”-基线特征三线表
首发于“生信补给站” :https://mp.weixin.qq.com/s/LJfgxbTqsp8egnQxEI0nJg 生物医学或其他研究论文中的“表一”多为基线特征的描述性统计.使用R单独进行统 ...
- 《ASP.NET Core 3框架揭秘》5折预售[发布试读章节]
<ASP.NET Core 3框架揭秘>于昨天在下午京东正式开始预售,并在半天之内销售近一千套.为了回馈读者,出版社与京东谈了一个5折的价格,这是一个连我都没有想到的价格,至少我写着几本书 ...
- vue-element-admin中是如何配置浏览器中的页面标题
因为在vue-element-admin中杈哥是写个一个动态路由标题,就是说你点进那个页面,它会显示对应页面的标题,所以我们仅仅在index页面进行修改是没有用的,那么我们改如何修改呢? 找到perm ...
- Java 14 发布了,再也不怕 NullPointerException 了!
2020年3月17日发布,Java正式发布了JDK 14 ,目前已经可以开放下载.在JDK 14中,共有16个新特性,本文主要来介绍其中的一个特性:JEP 358: Helpful NullPoint ...
- 基于 HTML5 WebGL 的 智慧楼宇能源监控系统
前言 21世纪,在能源危机和全球气候变暖的压力下,太阳能等可再生能源越来越受到关注,其中光伏建筑一体化逐渐成为绿色发展方式和生活方式,加强节能降耗,支持低碳产业和新能源.可再生能源发展,也已经成为国家 ...
- Java并发包下锁学习第一篇:介绍及学习安排
Java并发包下锁学习第一篇:介绍及学习安排 在Java并发编程中,实现锁的方式有两种,分别是:可以使用同步锁(synchronized关键字的锁),还有lock接口下的锁.从今天起,凯哥将带领大家一 ...
- 类与对象 CG作业1. 复数类Comple 。
问题描述]一个完整的复数由实数部分和序数部分构成,请定义一个复数类,含有两个私有属性realPart和imagPart分别表示复数的实部和虚部,三个成员函数:initComplex实现复数成员变量的初 ...
- Tensorflow系列专题(四):神经网络篇之前馈神经网络综述
目录: 神经网络前言 神经网络 感知机模型 多层神经网络 激活函数 Logistic函数 Tanh函数 ReLu函数 损失函数和输出单元 损失函数的选择 均方误差损失函数 交叉熵损失函数 输出单元的选 ...
- 前端验证,jquery.validate插件
jQuery Validate 简介: jQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求.该插件捆绑了一套有用 ...
- Python python 五种数据类型--字符串
# python 字符串的初始化 var1 = 'hello,world' # python 字符串为不可变类型 var2= var1* 2 print(var1) #hello,world prin ...