2

我的情况是我正在编写一个允许用户从数据库中删除记录的函数。为了提高效率,函数本身必须能够获取用于批量删除的参数列表。此外,为简单起见,该列表可以包含 ID(可以是stringsints行对象(被荣耀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

我可以看到为什么这是危险的(如果可以将类型强制转换为不是intor的 idbasestring怎么办?),但是对于不以某种方式涉及 isinstance 的更清洁的解决方案,我感到茫然,或依赖可能与我的实际代码相关或不相关的异常。

问题是,在 python 中执行此操作的最有效方法是什么?或者,或者,对调用者这么多只是一个灾难的秘诀,即我应该只要求参数是强制到一个int 行列表的类型列表?

4

1 回答 1

2

我建议不要让界面变得如此灵活。您的代码将更简单,有单独的 delete_rows(*row_objs) 和 delete_rows_by_id(*int_ids) 前者调用后者。

于 2013-02-19T00:35:34.047 回答