欢迎访问宙启技术站
智能推送

使用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() 进行复杂查询的示例,你可以根据自己的需求和数据库结构进行更复杂的查询和操作。