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
cx_Oracle
Python2.7でモジュールを使用しています。ユーザーにユーザーIDの入力を求めようとしています。次に、プログラムはuserIDがすでに存在するかどうか、およびユーザーに別のuserIDの入力を求めるプロンプトを表示するかどうかを確認します。executeメソッドは、cx_Oracleのexecuteメソッドを使用してOracleデータベースと対話するヘルパーメソッドです。getInputメソッドは、正規表現に対してチェックされる入力の入力をユーザーに求めます。
私はこれが間違っていることを知っていますが、while
ループが開始され、ユーザーがユーザーIDの入力を求められるという最初のアクションが実行されると思います。次に、userIDがデータベースに対してチェックされます。ループが開始され、によって返される行がユーザーによって提供されたuserIDと同じであるfor
かどうかがチェックされます。ds.execute()
それがユーザーである場合、ユーザーは別のユーザー名を使用するように指示され、ループをbreak
終了します。for
次に、if
ステートメントはユーザーが存在するかどうかをチェックし、存在しない場合はwhile
ループを中断します。そうでない場合は、while
ループが繰り返されるため、ユーザーは存在しないuserIDを入力するように求められます。
何が起こるかというと、ユーザーはuserIDの入力を求められますが、ユーザーにはチェックが行われていないように見え、プログラムは次のコードに進みます。ここで何が欠けていますか?のドキュメントへのリンクを含めましたexecute()
。上記のコードのexecuteメソッドは、次のヘルパーメソッドの一部です。
def execute(self, statement, **parameters):
if parameters is None:
self._curs.execute(statement)
else:
self._curs.execute(statement,parameters)
さらに情報を提供する必要がある場合はお知らせください。
編集:ループdoesUserExist = False
の開始直後の行を忘れたので、それを追加しました。while