【问题标题】:SQLAlchemy Return All Distinct Column ValuesSQLAlchemy 返回所有不同的列值
【发布时间】:2021-06-30 19:19:41
【问题描述】:

我正在使用 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

【问题讨论】:

    标签: python sqlalchemy


    【解决方案1】:

    使用模型查询结构,您可以做到这一点

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

    【讨论】:

    • 我认为这个答案很重要,因为 OP 可能正在使用 Flask-Sqlalchemy,并且可能希望更接近大多数 Flask 教程中的语法。
    【解决方案2】:
    query = session.query(Class.title.distinct().label("title"))
    titles = [row.title for row in query.all()]
    

    【讨论】:

    【解决方案3】:
    titles = [r.title for r in session.query(Class.title).distinct()]
    

    【讨论】:

      【解决方案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';
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-02
        • 2015-12-15
        • 2022-01-24
        • 2021-08-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多