使用BaseQuery()进行复杂查询的示例
发布时间:2024-01-03 01:23:26
BaseQuery() 是 SQLAlchemy 的查询构造器,它提供了一种灵活而强大的方式来构建和执行复杂的数据库查询。下面是一个例子,展示了如何使用 BaseQuery() 进行复杂查询。
假设我们有一个名为 Person 的数据表,包含以下字段:id、name、age、gender。
首先,我们需要导入必要的库和模块:
from flask import Flask from flask_sqlalchemy import SQLAlchemy from sqlalchemy import func
然后,我们需要创建一个 Flask 应用,并配置数据库:
app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db' db = SQLAlchemy(app)
接下来,我们定义一个 Person 模型类,并继承自 db.Model:
class Person(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
age = db.Column(db.Integer)
gender = db.Column(db.String(10))
现在,我们可以使用 BaseQuery() 来执行复杂查询了。以下是一些示例:
1. 查询所有人员的列表:
people = Person.query.all()
for person in people:
print(person.name)
2. 查询年龄小于 30 岁的所有人员的列表:
young_people = Person.query.filter(Person.age < 30).all()
for person in young_people:
print(person.name)
3. 查询男性人员的数量:
male_count = Person.query.filter_by(gender='male').count() print(male_count)
4. 查询每个性别的人员数量:
gender_count = db.session.query(Person.gender, func.count('*')).group_by(Person.gender).all()
for gender, count in gender_count:
print(gender, count)
5. 按照年龄进行升序排序,并取出前 10 个人员的列表:
top_10_oldest = Person.query.order_by(Person.age.asc()).limit(10).all()
for person in top_10_oldest:
print(person.name, person.age)
6. 查询名字包含字母 'a' 的人员列表,并按照年龄进行降序排序:
a_people = Person.query.filter(Person.name.like('%a%')).order_by(Person.age.desc()).all()
for person in a_people:
print(person.name, person.age)
以上仅仅是一些使用 BaseQuery() 进行复杂查询的示例,你可以根据自己的需求和数据库结构进行更复杂的查询和操作。
