web-dev-qa-db-ja.com

SQLAlchemyはすべての異なる列値を返します

FlaskとSQLAlchemyを使用してWebサイトを作成しています。このWebサイトは、学生が受講したクラスを追跡します。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に渡したいと思います。ありがとうございました。

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

モデルクエリ構造を使用すると、これを行うことができます

Class.query.with_entities(Class.title).distinct()
10
Thomas Morrison
titles = [r.title for r in session.query(Class.title).distinct()]
2
cheickmec

@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';
2
Samuel Nde