データベース モデル クラスには、パラメータ化された SQLSELECT
ステートメントを実行する多くのメソッドがあります。これらのクエリのほとんどにはWHERE
、結果をフィルター処理するフィールドを持つ句が含まれています。デフォルトの場合、すべての結果を取得するために where 句の比較を無視します。例:
def get_notes(self, pcb_serial_no, note_type=None):
''' Get notes recorded against a PCB unit, optionally filtered by note_type. '''
cursor = self.db.execute('''
SELECT pcb_serial_no, note_type, description, username, note_time
FROM pcb_notes_view
WHERE pcb_serial_no=?
AND COALESCE(?, note_type)=note_type
''',
(pcb_serial_no, note_type,)
)
rows = cursor.fetchall()
return len(rows) > 0 and rows
None
デフォルトの引数値(にマップNULL
) との組み合わせを使用していますCOALESCE
。これは、読みやすさのためにこれまでに考えられた最良の解決策です (もちろん主観的です) が、この「既定のパラメーター」は一般的な要件であり、それを実装するためにどのような慣用的な方法があるのか 疑問に思いましたか? COALESCE
また、特にその列がインデックス化されていない場合、デフォルトのケースでパフォーマンスが大幅に低下するかどうかもわかりません。