You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于SQLite与Python实现用户输入存储及税额自动计算求助

问题需求

需实现从Income(收入)列自动计算Tax(税额)列的功能,同时将用户输入的信息存储至SQLite数据库,现有Python代码存在问题,需排查并修正。

原代码问题排查

  • SQL插入语句语法错误:原代码中conn.execute的SQL字符串引号、括号不匹配,且format方法调用位置错误,导致SQL语句无法正确生成。
  • 缺失税额计算逻辑:未实现根据Income计算Tax的核心功能,插入数据时未传入税额值。
  • 输入类型未转换:input()获取的Income是字符串类型,直接存入数据库会导致数据类型错误,需转为数值型(float/int)。
  • 数据库连接关闭时机错误:在循环内部执行conn.close(),会导致后续操作(若循环次数大于1)无法访问数据库,应在所有操作完成后再关闭连接。
  • 表创建语句问题:原表创建语句被注释,首次运行时数据库中无tax表会导致插入失败;且未使用IF NOT EXISTS,重复运行会报错。
  • 存在SQL注入风险:使用字符串格式化拼接SQL语句,若用户输入特殊字符会引发SQL注入问题,应使用参数化查询。
  • 游标使用混乱:同时混用conn.execute和游标c.execute,代码逻辑不统一。

修正后的完整代码

import sqlite3

# 定义税额计算函数,可根据实际税率规则调整
def calculate_tax(income):
    if income <= 50000:
        return income * 0.10
    elif 50000 < income <= 100000:
        return 50000 * 0.10 + (income - 50000) * 0.20
    else:
        return 50000 * 0.10 + 50000 * 0.20 + (income - 100000) * 0.25

# 连接SQLite数据库,不存在则自动创建
conn = sqlite3.connect('tax1.db')
c = conn.cursor()

# 确保tax表存在,避免首次运行报错
c.execute("""CREATE TABLE IF NOT EXISTS tax (
          First text,
          Last text,
          Income real,
          Tax real
          )""")

# 获取用户输入并处理
first_name = input("请输入名字:")
last_name = input("请输入姓氏:")
try:
    income = float(input("请输入年收入:"))
    tax = calculate_tax(income)
    
    # 使用参数化查询插入数据,避免SQL注入
    c.execute("INSERT INTO tax VALUES (?, ?, ?, ?)", (first_name, last_name, income, tax))
    conn.commit()
    
    # 查询姓氏为Bass的记录并打印
    c.execute("SELECT * FROM tax WHERE Last='Bass'")
    print("查询结果:", c.fetchall())
except ValueError:
    print("年收入请输入有效的数字!")

# 所有操作完成后关闭数据库连接
conn.close()

代码说明

  • 税额计算:通过calculate_tax函数实现超额累进税率计算,可根据实际业务需求修改税率规则。
  • 参数化查询:用?作为占位符传递参数,既避免SQL注入风险,又保证数据类型匹配。
  • 错误处理:添加try-except捕获用户输入非数字的异常,提升代码健壮性。
  • 表创建优化:使用CREATE TABLE IF NOT EXISTS,确保首次运行创建表,重复运行不会触发表已存在的错误。
  • 连接管理:统一在所有数据库操作完成后关闭连接,避免资源泄漏。

内容的提问来源于stack exchange,提问作者Ashleigh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 17:18:10