将用户输入值与数据库中 table 中的所有其他值进行比较

comparing user input values with all other values in a table in the database

在我的 web2py 控制器中,我有一个函数将用户输入值与数据库中 table 中的值进行比较,但问题是只比较数据库中的第一个值,然后比较第二个和其他值它没有与用户输入的值进行比较!!!
代码:

def bMarket():
key=db(db.regKeys).select(db.regKeys.ALL)
for k in key:
    if request.vars.regCode == k.regKey:
        message="Correct Key"
        return DIV(message, _style="color: white; border: solid 1px green; width: 160px; background-color: green; font-weight: bold; padding: 3px; border-radius:5px;")
    else:
        return DIV("Incorrect Key", _id="regCodeTarget", _style="color: white; border: solid 1px red; width: 160px; background-color: red; font-weight: bold; padding: 3px; border-radius:5px;")<br />

我做错了什么???我如何才能将用户输入的值与数据库中的**所有其他值进行比较,而不仅仅是第一个值??**请帮忙!!!

for 循环内的代码检查密钥,如果不匹配,它会立即 return 发送 "Incorrect Key" 响应。相反,您应该遍历所有记录,并且在循环完成后仅 return "Incorrect Key":

def bMarket():
    key=db(db.regKeys).select(db.regKeys.ALL)
    for k in key:
        if request.vars.regCode == k.regKey:
            message="Correct Key"
            return DIV(message, _style="color: white; border: solid 1px green; width: 160px; background-color: green; font-weight: bold; padding: 3px; border-radius:5px;")
    return DIV("Incorrect Key", _id="regCodeTarget", _style="color: white; border: solid 1px red; width: 160px; background-color: red; font-weight: bold; padding: 3px; border-radius:5px;")

但是这种方法效率很低,因为它需要将数据库中的所有记录加载到一个Python对象中,然后循环遍历Python中的每条记录。相反,您应该直接通过数据库查询处理查找(不需要从数据库加载任何数据):

def bMarket():
    key_exists = not db(db.regKeys.regKey == request.vars.regCode).isempty()
    if key_exists:
        return DIV(...)
    else:
        return DIV(...)

为了加快查找速度,您可以在数据库中的 regKey 列上创建索引。