私の状況では、ユーザーがデータベースからレコードを削除できる関数を作成しています。効率を高めるために、関数自体がバッチ削除の引数のリストを取得できる必要があります。さらに、簡単にするために、リストには ID (strings
またはints
)または行オブジェクト (栄光化されたdicts
)のいずれかを含めることができます。
興味がある方のために説明すると、本格的な行を許可する理由は、ユーザーが問題の行を削除できることを確認するために行データを検査するセキュリティ チェックがあるためです。行の受け渡しを許可すると、データベースへのトリップを減らすことができます。
現在、私はしばしば非難さisinstance
れる関数を次のように使用しています。
def deleteRows(rowsToDelete):
ids = set()
rows = []
for r in rowsToDelete:
if isistance(r, basestring) or isinstance(r, int):
ids.add(r)
else:
rows.append(r)
# Some logic that SELECTS based on the data in ids and appends the
# result into rows...
# ... then security ...
# ... then DELETE
これが危険である理由はわかります ( or ではない id に型を強制できる場合はどうなるでしょうint
かbasestring
?)、しかし、何らかの方法で isinstance を含まないよりクリーンなソリューションを見つけることができません。 、または実際のコードに関連する場合と関連しない場合がある例外に依存しています。
問題は、python でこれを行う最も効果的な方法は何ですか? または、代わりに、呼び出し元をこれだけ赤ちゃんにすることは、災害のレシピにすぎません。つまり、パラメーターが強制するタイプのリストint
または行のリストのいずれかであることを要求する必要がありますか?