【发布时间】:2016-10-25 22:04:57
【问题描述】:
我使用 python 中的 cx_Oracle 模块来连接和查询 oracle 数据库。
import cx_Oracle
我已经构建了一个 tkinter 小部件,因此可以提示用户输入他们的用户名和密码,然后将其传递到连接方法的用户/密码部分:
username = 'user'
password = 'password'
db = cx_Oracle.connect('{0}/{1}@//random.company:1234/db1.company.com'.format(username, password))
当用户在第一次尝试中输入正确的用户名和密码时,这一切都很好,但是当他们没有输入时,我需要一些逻辑来迭代地重试他们的用户名和/或密码。
输入错误凭据时引发的错误是这样的:
cx_Oracle.DatabaseError: ORA-01017: 无效的用户名/密码;登录 拒绝
我已经在互联网上搜索了一段时间,但我似乎真的找不到适合我的东西。似乎我遇到的很多事情都涉及根据已知字典或类似的东西检查用户名和密码。我没有这样做的奢侈。反正我可能已经想太多了,所以我想发帖。我觉得这只是我需要的某种简单的“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())
更新
感谢下面的亚历克斯,我使用了他的代码,进行了一些自定义以供我自己使用,并且可以正常工作。这是工作代码:
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
【问题讨论】:
标签: python login passwords connect cx-oracle