我目前在Python上使用SQLite数据库。我正在创建一个ATM机程序。我有一个数据库,其中包括四个人,他们的密码,他们的余额,名称。数据库运行后将创建此数据库。提示后,我让用户输入他们的PIN号码。这将检查每个用户的密码,然后通过欢迎该特定人员的姓名进行回复。一个例子如下:
if UserID == userIDs[0][0]:
name = "Jeremy"
print("Hello {0}".format(name))
with sqlite3.connect("ATM.db"as db:
cursor=db.cursor()
mainMenu()
现在,我的问题是我不知道如何在这里有效地使用sqlite3。我是否只是为每个用户重新创建数据库,这样一旦他们使用引脚登录,数据库只保留单个人的记录?或者有没有办法(我希望)这意味着我不必删除原始数据库,但是告诉程序只关注这个人的记录,例如他“登录”。这是因为我希望程序最终能够提取资金等,并且每个用户的余额都不同等。
答案 0 :(得分:1)
如果您希望数据库模拟银行,我不明白您为什么要为每个用户创建单独的数据库。
显然,您不应该将真实银行的完整数据库放在用户的本地文件系统中,所以我将成为慈善机构并假设这只是一个玩具程序。
验证密码的一般机制是永远不要将密码直接存储在数据库中,而是使用像bcrypt这样的散列库(据我所知,python的当前最新密码哈希值)
检查文档:https://pypi.python.org/pypi/bcrypt/3.1.3
基本用法(直接引用文档):
>>> import bcrypt
>>> password = b"super secret password"
>>> # Hash a password for the first time, with a certain number of rounds
>>> hashed = bcrypt.hashpw(password, bcrypt.gensalt(14))
>>> # Check that a unhashed password matches one that has previously been
>>> # hashed
>>> if bcrypt.checkpw(password, hashed):
... print("It Matches!")
... else:
... print("It Does not Match :(")
问题的下一部分:如何只关注这个人的记录?
您必须跟踪当前登录的用户,并在所有查询中包含用户ID。
例如,如果您有一个列出用户事务的表,则需要将user_id存储在表中,并在应用程序中添加where user_id = ?
并提供user_id参数