Python web2py:从rows对象获取字段

Python web2py:从rows对象获取字段,python,web2py,Python,Web2py,“row”变量返回一行,但select语句似乎返回一个“rows”对象。我想从'row'变量中提取字段a和字段d 我尝试只执行row.a或row.d,但这会返回一个错误 def d_comp(): c_id = request.args(0) evo_id = request.args(1) row = db((db.tbl_stat.c_id == c_id) & (db.tbl_stat.evo_type == evo_id)).select()

“row”变量返回一行,但select语句似乎返回一个“rows”对象。我想从'row'变量中提取字段a和字段d

我尝试只执行row.a或row.d,但这会返回一个错误

def d_comp():    

    c_id = request.args(0)
    evo_id = request.args(1)

    row = db((db.tbl_stat.c_id == c_id) & (db.tbl_stat.evo_type == evo_id)).select()

    c = db(db.tbl_c.id == c_id).select(db.tbl_c.ALL)

    a = 1

    d = 1

    p = 1

    return dict(c=c,a=a,d=d,p=p)

我通过在html文件中执行以下操作解决了问题:

{{for val in row:}}
    {{=val.a}}
    {{=val.d}]
{{pass}}
.select()
方法始终返回DAL Rows对象,即使它不包含任何记录或仅包含一条记录。Rows对象的作用类似于列表,因此您可以通过订阅以下内容来提取单个记录(DAL行对象):

rows = db((db.tbl_stat.c_id == c_id) & (db.tbl_stat.evo_type == evo_id)).select()
row = rows[0]  # extracts the first record in "rows"
另一种提取第一行的方便方法是:

row = rows.first()

该方法的优点是,如果Rows对象中没有记录,它只返回
None
,而不是引发异常。

简短的答案是将.first()放在.select()之后

row = db((db.tbl_stat.c_id == c_id) & (db.tbl_stat.evo_type == evo_id)).select().first()