我的情况是我正在编写一个允许用户从数据库中删除记录的函数。为了提高效率,函数本身必须能够获取批量删除的参数列表。此外,为简单起见,列表可以包含ID(可以是strings
或ints
)或行对象(荣耀dicts
)
如果您感到好奇,允许完整行的原因是有安全检查检查行数据以确保允许用户删除有问题的行。允许传入行可以减少到数据库的访问。
目前,我以下列方式使用oft-chastised 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
或basestring
的ID?),但是我感到茫然更简洁的解决方案,不涉及以某种方式实现,或依赖可能与我的实际代码相关或可能不相关的异常。
问题是,在python中执行此操作的最有效方法是什么?或者,正在为调用者提供这么多只是灾难的处方,即我应该要求参数是强制转换为int
或行列表的类型列表?
答案 0 :(得分:2)
我建议不要让界面变得灵活。你的代码将更简单,有单独的delete_rows(* row_objs)和delete_rows_by_id(* int_ids)前者调用后者。