python - 处理 ids 和数据库行的异构列表的 pythonic 方法是什么

标签 python isinstance

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

我明白为什么这是危险的(如果有一种类型可以被强制转换为不是intbasestring的id怎么办?),但是我我不知道是否有一种更干净的解决方案,该解决方案不以某种方式涉及 isinstance,也不依赖于可能与我的实际代码相关或不相关的异常。

问题是,在 python 中执行此操作的最有效方法是什么?或者,对调用者如此溺爱只是一场灾难,即我应该只要求参数是强制转换为 int 的类型列表或行列表?

最佳答案

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

关于python - 处理 ids 和数据库行的异构列表的 pythonic 方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14947282/

相关文章:

Python:在多种条件下查找数组的索引

python - 如何从 asn1 编码数据中解码多个字节标签

Python继承与实例化

pygame 中用于 MVC 事件处理的 Python 鸭子类型(duck typing)

python - isinstance 替代检查作为父类或子类返回 flase 的类

python - 为什么在将参数 tz 指定给 fromtimestamp 方法时,datetime 的子类不是子类的实例?

python - db.session.commit 是否会更改 Flask-SQLAlchemy 中的应用程序上下文?

python - Pandas reshape 重复行

python isinstance 未按预期工作

python - 将多个变量断言为同一类型