python에서 cx_Oracle 모듈을 사용하여 oracle 데이터베이스를 연결하고 쿼리합니다.cx_Oracle 연결 메소드에서 성공하지 못하면 암호를 재 시도하라는 메시지 프롬프트
username = 'user'
password = 'password'
db = cx_Oracle.connect('{0}/{1}@//random.company:1234/db1.company.com'.format(username, password))
: 사용자가 차례로 연결 방법의 사용자/암호 부분에 전달 얻을 것이다, 사용자 이름과 암호를 입력하라는 메시지가 표시 될 수 있도록
import cx_Oracle
은 내가 Tkinter의 위젯을 구축 이 방법은 사용자가 첫 번째 시도에서 올바른 사용자 이름과 암호를 입력 할 때 제대로 작동하지만 그렇지 않은 경우 사용자 이름 및/또는 암호를 반복적으로 다시 시도 할 논리가 필요합니다.
잘못된 자격 증명을 입력 할 때 발생되는 오류는 이것이다 : 지금 잠시 동안 interweb 주위에 파고 봤는데 정말 작동 뭔가를 찾을 수 없습니다
cx_Oracle.DatabaseError: ORA-01017: invalid username/password; logon denied
나를. 내가 봤던 많은 것들이 사용자 명과 암호를 알고있는 사전이나 그 선을 따라 무엇인가를 확인하는 것과 관련이있는 것 같다. 나는 그렇게 할 사치가 없다. 나는 어쨌든 이것을 생각하고 끝나는 시점에 있으므로 게시하고 싶었습니다. 나는 그것이 필요한 일종의 쉬운 'while'루프 일 뿐이라고 느낀다. 뭔가 같이 :
여기while connection_throws_error_:
keep_trying_to_log_in
내 일반적인 코드 :
import Tkinter
from Tkinter import *
import cx_Oracle, pprint
master = Tk()
Label(master, text="Username").grid(row=0)
Label(master, text="Password").grid(row=1)
e1 = Entry(master)
e2 = Entry(master, fg = 'red', show="*")
e1.grid(row=0, column=1)
e2.grid(row=1, column=1)
Button(master, text='Login', command=master.quit).grid(row=3, column=1, sticky=W, pady=4)
master.title("MEMPRD Login")
master.mainloop()
# This is where I need to iteratively prompt user to enter crentials if they are incorrect.
db = cx_Oracle.connect('{0}/{1}@//random.company:1234/db1.company.com'.format(e1.get(), e2.get())
UPDATE 아래 알렉스에
감사합니다, 나는 몇 사용자 정의를 만들어, 자신의 코드를 사용했습니다 내 자신의 사용 및 작동합니다. 여기에 작업 코드입니다 :
master = Tk()
Label(master, text="Username").grid(row=0)
Label(master, text="Password").grid(row=1)
e1 = Entry(master)
e2 = Entry(master, fg = 'red', show="*")
e1.grid(row=0, column=1)
e2.grid(row=1, column=1)
Button(master, text='Login', command=master.quit).grid(row=3, column=1, sticky=W, pady=4)
#Button(master, text='Show', command=show_entry_fields).grid(row=3, column=1, sticky=W, pady=4)
master.title("Login")
master.mainloop()
#show_entry_fields()
print e1.get()
print e2.get()
while True:
try:
db = cx_Oracle.connect('{0}/{1}@//random.company:1234/db1.company.com'.format(e1.get(), e2.get())
except cx_Oracle.DatabaseError as e:
error, = e.args
if error.code == 1017:
print('Please check your credentials.')
e2.delete(0, 'end')
master.mainloop()
else:
raise
else:
print 'success!'
break
감사합니다. Alex. 이것은 제가 상상했던 것보다 더 많이 보입니다. while 회 돌이에서도 try 및 except 문을 통합해야한다는 느낌이 들었습니다. 이 기능이 어떻게 작동하는지 다시보고 하겠지만이 로그인 테스트를 모두 마치면 내 oracle 계정에서 자신을 잠급니다! – Mike