我正在使用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'
有什么想法吗?提前谢谢!
答案 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)