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

时间:2015-07-23 15:41:14

标签: database web2py

我的操作会将表x中的列y中的值列表传递给视图。当SELECT x FROM yx是视图给出的变量时,如何使用DAL“language”编写以下SQL:y。在这里,使用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)

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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