likes
comments
collection
share

SQLAlchemy系列之查询数据

作者站长头像
站长
· 阅读数 35

SQLAlchemy对数据库多种查询方式有很好的语法支持。为了更好的展示查询效果,先对之前的数据表employees增加几条记录再说,以便于后续的查询。

SQLAlchemy系列之查询数据

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数据表内容如下:

SQLAlchemy系列之查询数据

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
评论
请登录