Sqlalchemy-orm-textual-sql
SQLAlchemy ORM-テキストSQL
以前、text()関数を使用したテキストSQLは、SQLAlchemyのコア式言語の観点から説明されていました。 次に、ORMの観点から説明します。
リテラル文字列は、text()構造で使用を指定することにより、Queryオブジェクトで柔軟に使用できます。 ほとんどの適用可能なメソッドはそれを受け入れます。 たとえば、filter()およびorder_by()。
以下の例では、filter()メソッドは文字列「id <3」をWHERE id <3に変換します
生成された生のSQL式は、以下に示すコードを使用してWHERE句へのフィルタの変換を示しています-
Customersテーブルのサンプルデータから、2つの行が選択され、名前列が次のように印刷されます-
文字列ベースのSQLでバインドパラメータを指定するには、コロンを使用し、値を指定するには、params()メソッドを使用します。
Pythonコンソールに表示される有効なSQLは以下のようになります-
完全に文字列ベースのステートメントを使用するには、完全なステートメントを表すtext()コンストラクトをfrom_statement()に渡すことができます。
上記のコードの結果は、以下に示すように基本的なSELECTステートメントになります-
明らかに、顧客テーブルのすべてのレコードが選択されます。
text()構造により、テキストSQLをコアまたはORMにマップされた列式に位置的にリンクできます。 これは、列式を位置引数としてTextClause.columns()メソッドに渡すことで実現できます。
SQLiteエンジンが上記のコードによって生成された次の式を実行しても、すべての行のID列と名前列が選択されますtext()メソッドのすべての列を示します-