checkSql = 'SELECT userid FROM bs_members WHERE userid = :checkUser'
doesUserExist = False
while True:
doesUserExist = False
newUser.userID = ga.getInput('Enter userID: ', "\w+$")
checkUserID = ds.execute(checkSql,checkUser=newUser.userID)
for row in ds:
if row == checkUserID:
doesUserExist = True
print 'That user name is already in use. Please enter a new username.'
break
if doesUserExist == False:
break
else:
continue
我在Python 2.7中使用cx_Oracle
模块。我正在尝试提示用户输入用户ID。然后程序将检查用户标识是否已经存在,以及是否提示用户输入不同的用户标识。 execute方法是一种帮助方法,它使用cx_Oracle的execute方法与Oracle数据库进行交互。 getInput方法提示用户输入,然后使用正则表达式进行检查。我不明白为什么这个循环终止它的方式
我知道我有这个错误,但我相信while
循环启动第一个采取的操作是提示用户输入用户ID。然后根据数据库检查用户ID。 for
循环启动并检查ds.execute()
返回的行是否与用户提供的用户ID相同。如果是用户被告知使用其他用户名,并且break
退出for
循环。然后,if
语句将检查用户是否存在,如果不存在,则会中断while
循环。如果不是,则循环迭代while
,以便提示用户输入不存在的用户ID。
会发生什么情况是提示用户输入用户ID,然后没有任何检查发生在用户身上,程序移动到下一段代码。我在这里错过了什么?我已将link包括到的文档中。在上面的代码执行方法是以下的辅助方法的一部分:
def execute(self, statement, **parameters):
if parameters is None:
self._curs.execute(statement)
else:
self._curs.execute(statement,parameters)
如果我需要提供更多的信息,让我知道。
编辑:我忘记while
循环开始后立即行doesUserExist = False
,所以我补充说。
当前行为如何偏离您的预期行为? – Blender
恩,不应该只是使用'COUNT()'来检查结果值吗? –
'if doesUserExist == False:break'?请解释这里的逻辑。 –