如何将SQLite3数据库对接至银行系统登录模块实现凭证校验
SQLite3数据库对接银行系统登录模块实现方案
你已完成文件I/O版单用户业务逻辑、Bank_Users.db数据库及bank表搭建(PIN为主键,存储用户名,预置5条测试数据),对接核心是通过参数化查询匹配用户输入的凭证,校验通过即完成登录,以下是可直接落地的实现方式。
核心实现逻辑
整个对接流程不需要改动你已经写好的存取款、菜单业务代码,只需要替换原来文件I/O的凭证校验部分即可,分三步:
- 接收用户输入的用户名、PIN码
- 连接数据库执行参数化查询,匹配
bank表中同时符合用户名、PIN一致的记录 - 匹配到记录则判定为合法用户,加载对应账户的操作菜单;无匹配记录则返回凭证错误提示
注意:所有涉及用户输入的SQL查询必须用参数占位符实现,禁止直接拼接SQL字符串,避免SQL注入风险。
前置表结构确认
对接前先确认你的bank表字段和建表逻辑一致,参考建表语句如下(如果你的表已经建好可以跳过这步,注意保证测试数据里存在用户名Kailas Kurup、PIN7620的记录即可):
CREATE TABLE IF NOT EXISTS bank ( pin INTEGER PRIMARY KEY, username TEXT NOT NULL, balance REAL DEFAULT 0.0 -- 余额字段,后续存取款业务直接使用 );
可复用对接代码
import sqlite3 from typing import Optional, Dict def get_db_connection(): """封装数据库连接逻辑,减少重复代码""" conn = sqlite3.connect('Bank_Users.db') conn.row_factory = sqlite3.Row # 支持按字段名读取查询结果 return conn def login_verify(input_username: str, input_pin: int) -> Optional[Dict]: """ 登录凭证校验 校验通过返回用户信息字典,失败返回None """ conn = get_db_connection() cursor = conn.cursor() # 用?作为参数占位符,传入用户输入的内容做匹配 cursor.execute( "SELECT pin, username, balance FROM bank WHERE username = ? AND pin = ?", (input_username.strip(), input_pin) ) matched_user = cursor.fetchone() conn.close() return dict(matched_user) if matched_user else None # 登录流程测试 if __name__ == "__main__": print("=== 银行账户管理系统登录 ===") username = input("请输入用户名:").strip() pin = int(input("请输入PIN码:")) current_user = login_verify(username, pin) if current_user: print(f"登录成功!欢迎{current_user['username']}") print(f"当前账户余额:{current_user['balance']}元") # 此处直接接入你已经开发完成的存款、取款、操作菜单逻辑即可 else: print("登录失败:用户名或PIN码错误,请重试")
后续接入注意事项
- 后续接入Tkinter GUI时,只需要把命令行
input获取输入的部分,替换成GUI输入框的取值逻辑即可,校验和业务逻辑不需要改动 - 数据库连接使用完要及时关闭,避免出现数据库文件锁死的问题;如果后续业务操作频繁,可以封装全局数据库连接对象,减少重复开关连接的开销
- 原来第一阶段开发的存取款逻辑,只需要把原来读写文件更新余额的部分,替换成SQL的
UPDATE语句操作bank表对应记录的balance字段即可,核心业务流程不需要重写 - 测试时输入用户名
Kailas Kurup、PIN7620,只要预置数据中存在该条记录,即可正常识别并登录
内容的提问来源于stack exchange,提问作者kkurup
相关产品推荐
相关产品推荐

