无法将数据库字段的元组解压缩到 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, )

https://wiki.python.org/moin/TupleSyntax