我的情况是我正在编写一个允许用户从数据库中删除记录的函数。为了提高效率,函数本身必须能够获取用于批量删除的参数列表。此外,为简单起见,该列表可以包含 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
我可以看到为什么这是危险的(如果可以将类型强制转换为不是int
or的 idbasestring
怎么办?),但是对于不以某种方式涉及 isinstance 的更清洁的解决方案,我感到茫然,或依赖可能与我的实际代码相关或不相关的异常。
问题是,在 python 中执行此操作的最有效方法是什么?或者,或者,对调用者这么多只是一个灾难的秘诀,即我应该只要求参数是强制到一个int
或行列表的类型列表?