0

より具体的には、一度に 1 つの行を提供するジェネレーターをエミュレートする python db api を使用してデータベースを反復処理すると、その間に作成した新しい行もジェネレーターから返されますか?

このようなジェネレーターの実装には、新しい行が要求されるたびに次の行に移動するカーソルが含まれると思うので、私の推測ではイエスです。

4

2 に答える 2

1

ジェネレーターは、その間に作成した新しい行も返しますか?

「反復中に他の接続によって作成された行」という意味であれば、答えは「いいえ」です。


簡単に言えば、SELECT クエリを実行すると、DB の「スナップショット」が表示されます。DB への同時変更は、そのスナップショットからは見えません。

実際のところ、トランザクション テーブル (例: InnoDB) を使用している場合、トランザクション分離レベルによっては、新しいトランザクションを開くまで他の接続によって行われた変更が表示されない場合があります ( auto_commitモードでは、新しいトランザクションはリクエストごとに開いています)。

于 2013-08-07T18:43:54.910 に答える
1

いいえ。

SQL クエリを作成し、結果の取得を開始すると、新しい行が結果セットに含まれているかどうかを確認できません。

結果は、メモリ内またはデータベースのバッファ内にある可能性があります。

次のようなことができます。

while ( result = "SELECT .... where processed=0 LIMIT 1" )
{
   do processing
   Run Sql "UPDATE row set processed=1 where id = result[id]"
}
于 2013-08-07T18:46:25.950 に答える