71

SQLAlchemyとElixirを使用して作成している小さなスクリプトでは、特定の列のすべての個別の値を取得する必要があります。通常のSQLでは、次のような単純な問題になります。

SELECT DISTINCT `column` FROM `table`;

そのクエリを「手動で」実行できることはわかっていますが、可能であれば、SQLAlchemyの宣言型構文(および/またはElixir)に固執したいと思います。私はそれが可能であるに違いないと確信しています。SQLAlchemyのドキュメントでこの種のことをほのめかしているのを見たこともありますが、私はそのドキュメントを何時間も(そしてElixirのドキュメントも)探し続けてきました。それがどのように行われるかを実際に理解しているようです。だから私は何が欠けていますか?

4

5 に答える 5

128

マップされたクラスの列プロパティを照会でき、Query クラスには生成distinct()メソッドがあります。

for value in Session.query(Table.column).distinct():
     pass
于 2010-02-01T08:17:32.453 に答える
9

このクラスの場合:

class Assurance(db.Model):
    name = Column(String)

あなたはこれを行うことができます:

assurances = []
for assurance in Assurance.query.distinct(Assurance.name):
    assurances.append(assurance.name)

個別の値のリストが表示されます

于 2016-03-01T08:56:48.130 に答える
5

私は個別の値を数えたかったのですが、 and を使用して.distinct()最初.count()にカウントし、結果として単一の値を取得してから、個別の値を取得しました。私は次のことをしなければなりませんでした

from sqlalchemy.sql import func
Session.query(func.count(func.distinct(Table.column))
于 2020-07-17T17:44:36.177 に答える
3
for user in session.query(users_table).distinct():
    print user.posting_id
于 2012-02-15T05:10:05.573 に答える