19

私はPythonジェネレーターに精通していますが、私が精通しておらず、満足のいく定義を見つけることができない「生成メソッド」という用語に出くわしたばかりです。

文脈を説明するために、SQLAlchemyのナラティブドキュメントでこの用語を見つけました。

「autocommit」動作の完全な制御は、Connection、Engine、Executableで提供される生成的なConnection.execution_options()メソッドを使用し、選択したスコープの自動コミットをオンまたはオフにする「autocommit」フラグを使用して利用できます。

生成方法とは何ですか?によって返されたオブジェクトを反復しようとしてConnection.execution_options()も機能しないため、標準のジェネレーター以外のものであると考えています。

4

4 に答える 4

30

これは一般的なデータベースの概念ではないようですが、SQLAlchemyは、「実行時にプログラムによって繰り返し生成される」という意味で生成という用語を使用します。(したがって、Pythonジェネレーターへの接続はありません)。チュートリアルの例:

Queryオブジェクトは完全に生成的です。つまり、ほとんどのメソッド呼び出しは新しいQueryオブジェクトを返し、その上にさらに基準を追加できます。たとえば、フルネームが「EdJones」の「ed」という名前のユーザーをクエリするには、filter()2回呼び出すことができます。これは、ANDを使用して条件を結合します。

>>> for user in session.query(User).\
...   filter(User.name=='ed').\
...   filter(User.fullname=='Ed Jones'):
...     print user

この呼び出し構文は、より一般的には「メソッドチェーン」と呼ばれ、「流暢なインターフェイス」として使用できるようにする設計です。

したがって、の場合Connection.execution_options()、「生成的」とは、変更された接続オブジェクトを返すことを意味します。これにより、上記のように呼び出しを連鎖させることができます。

于 2012-04-07T10:13:52.623 に答える
4

Connection.execution_options(lib / sqlalchemy / engine / base.py)のソースコードを見ると、そのメソッドが行うのは、接続にオプションを追加することだけです。

これらのオプションは、クエリなどの将来の動作に影響を与えるという考え方です。

例として:

        result = connection.execution_options(stream_results=True).\
                            execute(stmt)

ここでは、このクエリの接続の途中で動作が変更されました。ある意味で、それはわずかに異なる振る舞いを持つオブジェクトとしてそれ自体を「生成」または複製します。

ここで、自動コミットをTrueに設定することもできます。例

# obtain a connection
connection = ...
# do some stuff
# for the next section we want autocommit on
autocommitting_connection = connection.execution_options(autocommit=True)
autocommitting_connection.execute(some_insert)
result = autocommitting_connection.execute(some_query)
# done with this section. Continue using connection (no autocommit)

これは、ドキュメントのそのセクションで意味されていることです。「生成メソッド」とは、作業を続行できる同じインスタンスの変更されたコピーを返すメソッドを指します。これは、クラスConnection、Engine、Executableに適用されます。

于 2012-04-08T10:48:40.883 に答える
3

そのプロジェクトの特定のドキュメントまたはソースコードを参照して実際に確認する必要がありますが、引数で定義された要件/動作に適合したオブジェクトの変更バージョンが返されると思います。

ドキュメントには次のように記載されています。

このメソッドはConnection、同じ基になるDBAPI接続を参照するこのコピーを返しますが、への呼び出しに対して有効になる指定された実行オプションも定義しますexecute()

于 2012-04-05T02:44:26.647 に答える
0

上記の@zzzeekのコメントのように、これはSQLAlchemyの用語集に記載されています。

生成手段:

SQLAlchemyが通常メソッドチェーンとして知られているものを指すために使用する用語。詳細については、その用語を参照してください。

そして、メソッドの連鎖は次のとおりです。

オブジェクトの状態がオブジェクトのメソッドを呼び出すことによって構築されるオブジェクト指向の手法。オブジェクトには任意の数のメソッドがあり、各メソッドは、オブジェクトに追加の状態が追加された新しいオブジェクト(または場合によっては同じオブジェクト)を返します。

于 2016-09-13T10:19:27.067 に答える