创建一个抽象web2py数据库调用的函数

时间:2015-07-08 16:26:48

标签: web2py

我正在使用web2py及其DAL。我想做一个函数(有几个原因,如代码可读性,从web2py抽象...),它将在数据库上执行select。例如:

def get_element_from_id(id, *options):
  return db(db.element.id == id).select(options)

这个功能非常基础,但它不起作用。如果我没有提供任何选项(只需拨打get_element_from_id(1)),我就会有一个很棒的选择:

  

AttributeError:' tuple'对象没有属性'键入'

如果我提供了一个选项(例如get_element_from_id(1, db.element.id)),我会得到一个:

  

AttributeError:' NoneType'对象没有属性' startswith'

有什么想法吗?提前谢谢!

1 个答案:

答案 0 :(得分:1)

在函数中,options将是一个列表,但.select()不会列出列表,因此您必须使用*表示法将列表扩展为一组参数:

.select(*options)

另外,为了使函数更通用,您可能还想允许.select()方法的关键字参数 - 所以:

def get_element_from_id(id, *args, **kwargs):
    return db(db.element.id == id).select(*args, **kwargs)

另外,请注意,如果您只想根据ID检索整个记录,DAL已允许您执行此操作:

db.element(id)