我的情况是我正在编写一个允许用户从数据库中删除记录的函数。为了提高效率,函数本身必须能够获取参数列表以进行批量删除。此外,为简单起见,列表可以包含 ID(可以是字符串或整数)或行对象(美化为 >字典
)
如果您好奇,允许完整行的原因是存在安全检查来检查行数据以确保允许用户删除有问题的行。允许传入行可以减少数据库访问次数。
目前,我通过以下方式使用经常使用的 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_ids) 前者调用后者。
关于python - 处理 ids 和数据库行的异构列表的 pythonic 方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14947282/