5

selectとの違いは何tablename.select()ですか?私が好きに列名を渡すときtable.select

table.select(table.c.name)

SQLは次のようなものです

select * from tablename where tablename.name

そして、列をselect(インスタンスメソッド)に渡すと:

select([table.c.name])

SQLは次のようなものです

select name from tablename

と同じ結果が欲しいselectですtable.select

私がそれのドキュメントを読んだとき、selectそれは同じなので同じ方法ですが、なぜそれらは異なる振る舞いをしているのですか?

4

1 に答える 1

7

おそらく、select()あなたとは意味しますsqlalchemy.sql.select()

このselect()関数は、引数として一連の列を明示的に受け取り、その結果はスタンドアロンSelectインスタンスになります。FromClauseオブジェクト(テーブルやエイリアスなど)を渡すこともでき、そのオブジェクトから列を取得します。これについては、コアチュートリアルの「選択」の章で詳しく説明されています。

一方、.select()テーブルのメソッドは、列のセットではなくwhereclause、最初の引数を取ります。つまり、そのメソッドに渡すものは何でも、選択したい列ではなく、選択用のフィルターを形成します。where句の列を渡すことにより、すべての列を選択しますが、でフィルタリングします。式は実際に一致する行を制限しないため、フィルターはそれほど多くありません。WHEREWHERE [columnname]

関数の適切な使用はtable.select()、選択フィルターを渡すことであり、すべての列を選択する意図です。

table.select(table.c.name != None)

これは次のようにコンパイルされます。

SELECT * FROM tablename WHERE tablename.name IS NOT NULL;

(SQLAlchemyは、どの列が存在するかを知っていますが、すべての列名*の明示的なリストに展開されます)。table

select()特定の列のみを選択するには、関数に固執する必要があります。

于 2012-12-02T21:18:07.777 に答える