无法将数据库字段的元组解压缩到 db().select() 函数中
Unable to unpack tuple of db fields into db().select() function
我没有解包字段列表,而是尝试解包字段元组,并将结果传递给 db().select() 函数,如下所示:
def get_record(self, record_id, fields):
try:
return self.db(self.db.t_group.id == record_id).select(*fields).first()
except Exception as e:
print e
def fun1(self, record_id):
self.get_record(record_id, (self.db.t_group.f_expiration))
这样做会迅速耗尽系统的所有内存,或多或少地导致系统停止运行。但是,如果我传递的是列表而不是元组,如以下语句所示,函数将按预期工作:
def fun1(self, record_id):
self.get_record(record_id, [self.db.t_group.f_expiration])
为什么将元组解压到 db().select() 函数中会出现问题?
(self.db.t_group.f_expiration)
不是元组,只是等同于 self.db.t_group.f_expiration
.
在 Python 中,元组是通过用逗号分隔项目来定义的,而不是通过用圆括号包围项目(圆括号并不总是需要的,只是使在更大的上下文中定义元组表达式成为可能,如与任何其他表达)。要创建单项元组,只需在项目后添加一个逗号(如有必要,将整个内容括在括号中)。在这种情况下:
(self.db.t_group.f_expiration, )
我没有解包字段列表,而是尝试解包字段元组,并将结果传递给 db().select() 函数,如下所示:
def get_record(self, record_id, fields):
try:
return self.db(self.db.t_group.id == record_id).select(*fields).first()
except Exception as e:
print e
def fun1(self, record_id):
self.get_record(record_id, (self.db.t_group.f_expiration))
这样做会迅速耗尽系统的所有内存,或多或少地导致系统停止运行。但是,如果我传递的是列表而不是元组,如以下语句所示,函数将按预期工作:
def fun1(self, record_id):
self.get_record(record_id, [self.db.t_group.f_expiration])
为什么将元组解压到 db().select() 函数中会出现问题?
(self.db.t_group.f_expiration)
不是元组,只是等同于 self.db.t_group.f_expiration
.
在 Python 中,元组是通过用逗号分隔项目来定义的,而不是通过用圆括号包围项目(圆括号并不总是需要的,只是使在更大的上下文中定义元组表达式成为可能,如与任何其他表达)。要创建单项元组,只需在项目后添加一个逗号(如有必要,将整个内容括在括号中)。在这种情况下:
(self.db.t_group.f_expiration, )