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'?請解釋這裏的邏輯。 –