Web2py:写 SQL 查询:"SELECT x FROM y" 使用 DAL,当 x 和 y 是变量时,并将结果转换为列表?

Web2py: Write SQL query: "SELECT x FROM y" using DAL, when x and y are variables, and convert the results to a list?

我的操作将 table y 中的列 x 中的值列表传递给视图。我如何写下面的SQL:SELECT x FROM y,使用DAL "language",当xy是视图给出的变量时。在这里,使用 exequtesql().

def myAction():
    x = request.args(0, cast=str)
    y = request.args(1, cast=str)
    myrows = db.executesql('SELECT '+ x + ' FROM '+ y)
    #Let's convert it to the list:
    mylist = []
    for row in myrows:
        value = row #this line doesn't work
        mylist.append(value)
    return (mylist=mylist)

此外,是否有更方便的方法将该数据转换为列表?

首先,请注意,您必须为要访问的任何 table(即 db.define_table('mytable', ...))创建 table 定义。假设您已经这样做了,并且 y 是单个 table 的名称,而 x 是 table 中单个字段的名称,您将执行:

    myrows = db().select(db[y][x])
    mylist = [r[x] for r in myrows]

请注意,如果返回任何记录,.select() 总是会生成一个 Row 对象,该对象包含一组 Row 对象(即使只选择了一个字段)。因此,要将各个值提取到列表中,您必须遍历 Rows 对象并从每个 Row 对象中提取相关字段。上面的代码通过列表理解来实现。

此外,您可能想添加一些代码来检查 db[y]db[y][x] 是否存在。