制作一个函数来抽象 web2py 数据库调用
Making a function to abstract a web2py DB call
我正在使用带有 DAL 的 web2py。我想做一个函数(出于代码可读性、从 web2py 抽象等多种原因……),它将在数据库上执行 select。例如:
def get_element_from_id(id, *options):
return db(db.element.id == id).select(options)
功能很基础,但是用不上。如果我不提供选项(只是调用 get_element_from_id(1)
),我有一个很棒的:
AttributeError: 'tuple' object has no attribute 'type'
如果我提供一个选项(例如 get_element_from_id(1, db.element.id)
),我会得到:
AttributeError: 'NoneType' object has no attribute 'startswith'
有什么想法吗?提前致谢!
函数中,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)
我正在使用带有 DAL 的 web2py。我想做一个函数(出于代码可读性、从 web2py 抽象等多种原因……),它将在数据库上执行 select。例如:
def get_element_from_id(id, *options):
return db(db.element.id == id).select(options)
功能很基础,但是用不上。如果我不提供选项(只是调用 get_element_from_id(1)
),我有一个很棒的:
AttributeError: 'tuple' object has no attribute 'type'
如果我提供一个选项(例如 get_element_from_id(1, db.element.id)
),我会得到:
AttributeError: 'NoneType' object has no attribute 'startswith'
有什么想法吗?提前致谢!
函数中,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)