SQLAlchemy系列之查询数据
SQLAlchemy对数据库多种查询方式有很好的语法支持。为了更好的展示查询效果,先对之前的数据表employees增加几条记录再说,以便于后续的查询。
1.两种查询方式
1.1 查询完整记录
这里是指查询整条记录(即整行数据,而不是某几列)。该种方式的具体代码如下:
# 创建会话session
DBsession = sessionmaker(bind=engine)
session = DBsession()
# 新增数据
data_list = session.query(Employees).all()
for data in data_list:
print(data.name)
result:
法外狂徒张三
耀仁民
史珍香
1.2 查询具体字段
这里是指针对某一列或者某吉列数据进行查询。该种方式的具体代码如下:
# 创建会话session
DBsession = sessionmaker(bind=engine)
session = DBsession()
# 新增数据
data_list = session.query(Employees.name).all()
for data in data_list:
print(data)
result:
('史珍香',)
('法外狂徒张三',)
('耀仁民',)
2.设置筛选条件
2.1 filter方法
# 创建会话session
DBsession = sessionmaker(bind=engine)
session = DBsession()
# 新增数据
data_list = session.query(Employees.name).filter(Employees.id==1).all()
for data in data_list:
print(data)
result:
('法外狂徒张三',)
2.2 filter_by方法
# 创建会话session
DBsession = sessionmaker(bind=engine)
session = DBsession()
# 新增数据
data_list = session.query(Employees.name).filter_by(id=1).all()
for data in data_list:
print(data)
result:
('法外狂徒张三',)
filter和filter_by的区别
(1) 字段写法:filter筛选的字段是带类名(表名)的,而filter_by只需要筛选字段即可。
(2) 判断条件:filter比filter_by多出一个等号
(3) 作用范围:filter可以用于单标或者多表查询,而filter_by只能用于单表查询
3.多条件筛选
3.1 and关系
# 创建会话session
DBsession = sessionmaker(bind=engine)
session = DBsession()
# 新增数据
data_list = session.query(Employees).filter(Employees.sex == '男', Employees.age >= 20).all()
print(data_list[0].name)
result:
法外狂徒张三
3.2 or关系
from sqlalchemy import or_
# 创建会话session
DBsession = sessionmaker(bind=engine)
session = DBsession()
# 新增数据
data_list = session.query(Employees).filter(or_(Employees.sex == '男', Employees.age >= 20)).all()
for data in data_list:
print(data.name)
result:
法外狂徒张三
耀仁民
史珍香
4.连接查询
与数据表employees关联的worker数据表内容如下:
4.1 内连接
# 创建会话session
DBsession = sessionmaker(bind=engine)
session = DBsession()
data_list = session.query(Employees).join(Worker, Employees.name == Worker.name).filter(Employees.sex == '男').all()
for data in data_list:
print(data.name)
result:
法外狂徒张三
4.2 外连接
# 创建会话session
DBsession = sessionmaker(bind=engine)
session = DBsession()
data_list = session.query(Employees).outerjoin(Worker, Employees.name==Worker.name).filter(Employees.sex == '男').all()
for data in data_list:
print(data.name)
result:
法外狂徒张三
耀仁民
5.直接执行SQL语句
# 创建会话session
DBsession = sessionmaker(bind=engine)
session = DBsession()
sql = 'select * from employees'
result = session.execute(sql)
print(list(result))
result:
[(1, '法外狂徒张三', '男', 25, datetime.date(1993, 10, 23), '测试', datetime.date(2017, 9, 11), datetime.date(2018, 3, 7)), (2, '耀仁民', '男', 16, datetime.date(2005, 7, 1), '运维', datetime.date(2014, 9, 5), datetime.date(2021, 9, 23)), (3, '史珍香', '女', 24, datetime.date(1997, 6, 26), 'UI', datetime.date(2020, 9, 29), datetime.date(2021, 9, 6))]
转载自:https://juejin.cn/post/7015036432117366814