我的情况是,我正在编写一个函数,允许用户从数据库中删除记录。为了提高效率,函数本身必须能够获取参数列表以进行批量删除。此外,为了简单起见,列表可以包含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
或basestring
的id怎么办?)但是,我无法找到一个更干净的解决方案,该解决方案不以某种方式涉及isinstance,也不依赖于与实际代码相关或不相关的异常。你知道吗
问题是,在python中最有效的方法是什么?或者,对调用者的娇惯仅仅是一种灾难的预兆,也就是说,我应该要求参数要么是一个强制执行int
的类型列表,要么是一个行列表?你知道吗
我建议不要让界面变得如此灵活。您的代码将更简单,有单独的delete_rows(*row_objs)和delete_rows_by_id(*int_id)前者调用后者。你知道吗
相关问题 更多 >
编程相关推荐