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
モジュールをPython 2.7で使用しています。ユーザーにuserIDの入力を促すようにしています。プログラムはuserIDがすでに存在しているかどうかを確認し、別のuserIDを入力するかどうかを確認します。 executeメソッドは、cx_Oracleのexecuteメソッドを使用してOracleデータベースと対話するヘルパー・メソッドです。 getInputメソッドは、ユーザーに入力を求めるプロンプトを出し、正規表現と照合します。なぜこのループが終了するのか分かりません
私はこれが間違っていることを知っていますが、私はwhile
というループが最初のアクションを開始すると信じています。ユーザーはuserIDの入力が求められます。次に、ユーザーIDがデータベースに対してチェックされます。 for
ループが開始し、ds.execute()
によって返された行が、ユーザーによって提供されたユーザーIDと同じであるかどうかがチェックされます。ユーザーに別のユーザー名を使用するように指示されている場合、break
はfor
ループを終了します。次に、if
ステートメントはユーザーが存在するかどうかをチェックし、ユーザーが存在しない場合はwhile
ループを壊します。そうでなければwhile
ループが反復するので、ユーザーは存在しないuserIDを入力するよう求められます。
何が起こるかは、ユーザーがユーザーIDを入力するように求められた場合、ユーザーにチェックが行われていないと思われ、プログラムは次のコードに移動します。私はここで何が欠けていますか?のドキュメントにはlinkが含まれています。上記のコードのexecuteメソッドは、次のヘルパーメソッドの一部です。
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'?ここでその論理を説明してください。 –