
insert
は
select
ではない
データベースの
insert
と
select
は違う
このページのタイトルを見て「当たり前だ、もちろん違う!」と思ったかもしれませんね。
もちろん、
insert
は
select
とは異なります。
Web
アプリケーションにおいてこの
2
つのクエリをど
う使うかに依存します。
log_request
の
insert
はブロックする必要がないのに対し、
view_the_
log
の
select
はブロックする必要があるなど、これらのクエリは大きく異なります。
この違いは重要です。
view_the_log
の
select
がデータベースから返されるデータを待たないと、
cursor.execute
に
続くコードはおそらく失敗するでしょう(処理するデータがないため)。
view_the_log
関数はデータを
待ってから先に進む必要があるので、ブロックします。
Web
アプリケーションが
log_request
を呼び出すときには、
log_request
に現在のリクエストの情
報をデータベースにログデータとして格納してもらいたいのです。呼び出し側コードにとってはいつロギ
ングするかは重要ではありません。
log_request
関数は値もデータも返しません。呼び出し側のコード
はレスポンスを待ちません。呼び出し側コードは、
Web
リクエストが最終的にロギングされているかどう
かだけが重要です。
すると、なぜ
log_request
は呼び出し側を待たせるのかという疑問が生じます。
464
11 3/4
章
log_re