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

Python中更新table2 quantity列后自动求和table1 quantity列遇属性错误

问题解决步骤

1. 修复self.var_qunt.get()的属性错误

  • 核对变量定义:检查类的初始化方法(__init__)里是否正确创建了self.var_qunt,比如有没有拼写错误(比如实际是self.var_qunty1或self.var_quantity),或者根本没初始化。正确的初始化写法应该是self.var_qunt = IntVar()(数值类型)或self.var_qunt = StringVar()(字符串类型)。
  • 注意大小写:Python对大小写敏感,确认变量名的大小写和定义时完全一致,比如var_Qunt和var_qunt是两个不同的变量。

2. 实现更新table2时自动求和table1的逻辑

你的核心需求是更新table2的quantity后,自动将table1的quantity更新为对应关联项的求和值,最可靠的方式是用数据库触发器(数据库层面自动执行,避免Python代码漏处理),而非手动写复杂的多表更新。

示例触发器(以SQLite为例,其他数据库语法类似)

假设table1和table2通过name字段关联(如果是其他关联字段,比如pid,自行替换),执行以下SQL创建触发器后,每次table2的quantity更新,会自动计算对应name的总和并同步到table1:

CREATE TRIGGER IF NOT EXISTS update_table1_quantity
AFTER UPDATE OF quantity ON table2
BEGIN
    UPDATE table1
    SET quantity = (SELECT SUM(quantity) FROM table2 WHERE table2.name = table1.name)
    WHERE table1.name = NEW.name;
END;

你可以在数据库初始化时执行一次这个SQL,确保触发器存在。

修正后的Python更新代码

原SQL语句存在多处语法错误(多表更新写法错误、WHERE条件用逗号分隔、赋值逻辑错误),修正后只需单独更新table2,触发器会自动处理table1的求和:

# 执行table2的更新操作
cur.execute('''
UPDATE table2
SET name = ?, price = ?, quantity = ?, qunty1 = ?
WHERE cid = ?
''', (
    self.var_pname.get(),
    self.var_price.get(),
    self.var_qty.get(),
    self.var_updatevalue.get(),  # 替换为qunty1对应的变量值,根据你的实际情况调整
    self.var_cpid.get()
))
# 提交事务,确保修改生效
conn.commit()

3. 额外注意事项

  • 若使用MySQL,触发器语法略有差异,但核心逻辑一致,只需调整SQL格式。
  • 确保table1和table2的关联字段逻辑正确(比如name是否唯一,或用pid关联),否则求和结果会不符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:05:19