【发布时间】:2021-07-23 15:18:28
【问题描述】:
我有来自 SQL Server 的用户信息 - 用户名和密码 - 现在我想创建一个字典
{ID : password}
但如果我有多个,它只会保存我放入的最后一个
for i in (cursor.execute('select * from Person')):
idNameDict = {i[0]:i[3]}
我想这样做,这样我可以更容易地检查基于 ID 输入的密码是否正确,因为现在看起来很长
def logIn(userName,userPassword):
userID=[]
global p
lbl = Label(root)
lbl.grid(row=5,column=1)
for user in (cursor.execute('select * from Person')):
p = Person(user[0],user[1],user[2],user[3])
userID.append(p)
for id in userID:
if userName == id.ID:
if userPassword == id.password:
userPage(root,userName)
else:
lbl.config(text= "Invalid Password")
else:
lbl.config(text= "Invalid User Name")
【问题讨论】:
-
为什么每次都取整个表?只需执行
cursor.execute("SELECT * FROM Person WHERE ID=?", (id,))。这样就不需要循环了,你减少了网络流量。 -
我真诚地希望您不打算在任何生产系统中以纯文本形式存储密码。
-
暂时不,我只是在构建一个宠物项目。所以它不会用于大众市场或任何只为我自己的东西
-
我只是不确定,如果最佳做法是从 SQL 中提取所有信息,然后将其放在一个类中并解决这个问题,或者只是从 SQL 中提取数据
-
每次调用只需要一个用户名。具体来说,这段代码没有缓存任何东西。它正在为每次通话读取整个表格。更好地阅读您需要的一个名字。
标签: python sql-server project