SQLAlchemy 返回所有不同的列值

22 投票
4 回答
42372 浏览
提问于 2025-04-17 21:27

我正在用Flask和SQLAlchemy创建一个网站。这个网站用来记录学生上过的课程。我想找个办法,通过SQLAlchemy在我的数据库里搜索,找出所有已经输入的独特课程。下面是我在models.py文件中关于课程的代码:

class Class(db.Model):
    __tablename__ = 'classes'
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100))
    body = db.Column(db.Text)
    created = db.Column(db.DateTime, default=datetime.datetime.now)
    user_email = db.Column(db.String(100), db.ForeignKey(User.email))
    user = db.relationship(User)

换句话说,我想从标题这一列中获取所有独特的值,然后把这些值传递给我的views.py

4 个回答

4

正如@van所提到的,你想要的东西是:

session.query(your_table.column1.distinct()).all(); #SELECT DISTINCT(column1) FROM your_table

但我还想补充一点,在大多数情况下,你可能还想对结果再加一个过滤条件。这样的话,你可以这样做:

session.query(your_table.column1.distinct()).filter_by(column2 = 'some_column2_value').all();

这段代码可以转化为sql语句:

SELECT DISTINCT(column1) FROM your_table WHERE column2 = 'some_column2_value';
7

在编程中,有时候我们需要让程序在特定的条件下执行某些操作。这就像是给程序设定了一些规则,只有当这些规则被满足时,程序才会继续运行。

比如说,你可能希望程序在用户输入正确的密码后才能进入系统。这个时候,你就需要用到“条件语句”。条件语句就像是一个检查点,它会判断某个条件是否成立。如果成立,程序就会执行相应的操作;如果不成立,程序就会跳过这些操作。

在代码中,条件语句通常是用“if”这个词来表示的。你可以把它想象成一个问句:如果这个条件成立,那么就做某件事。

总之,条件语句帮助我们控制程序的运行逻辑,让程序能够根据不同的情况做出不同的反应。

titles = [r.title for r in session.query(Class.title).distinct()]
35

你可以使用模型查询的结构来做到这一点。

Class.query.with_entities(Class.title).distinct()
26

在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后在另一个地方使用这些数据。这个过程就像是把水从一个水桶倒到另一个水桶里。

有些时候,我们会遇到一些问题,比如数据的格式不对,或者我们想要的数据没有被正确地获取到。这就像是你想要的水桶里没有水,或者水的颜色不对。

为了避免这些问题,我们可以使用一些工具和方法来确保数据的获取和使用是正确的。这就像是使用一个漏斗来帮助你把水倒得更顺畅,不会洒出来。

总之,处理数据就像是一个小实验,我们需要仔细观察,确保每一步都做对,这样才能得到我们想要的结果。

query = session.query(Class.title.distinct().label("title"))
titles = [row.title for row in query.all()]

撰写回答