SQLAlchemy返回所有不同的列值

时间:2014-03-08 21:38:30

标签: sqlalchemy flask flask-sqlalchemy

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

5 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:5)

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

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

@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';

答案 4 :(得分:0)

使用 flask-sqlalchemy 可以使用 -

result = Class.query.distinct(Class.title)

dist_titles = [r.title for r in result]