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

如何使用QSqlRelationalTableModel对关联表执行更新或插入操作

QSqlRelationalTableModel 关联表数据操作方案

结论

可以通过该模型实现已有邮箱数据的更新,新增邮箱数据需要配合手动SQL操作完成,无法完全依赖模型自动实现一对多场景的插入


1. 更新已有邮箱地址操作

如果仅需要修改某条person记录已关联的邮箱地址,可直接操作模型的关联列,模型会自动同步更新email表的对应记录:

# 示例:修改第1行person对应的邮箱地址,关联邮箱为模型第1列
rel_model.setData(rel_model.index(1, 1), "updated_email@test.com")
# 提交后自动同步到person、email两张表
rel_model.submitAll()

注意:如果该邮箱ID同时关联了多个person记录,修改会同步影响所有关联的人员数据。


2. 插入新邮箱数据操作

因为你当前的模型主表是person,单条person记录的关联字段仅存储一个email ID,无法直接实现单person多邮箱的新增,需要先手动插入email表获取新ID,再绑定到person记录:

# 第一步:先向email表插入新邮箱记录,获取生成的自增ID
query = QSqlQuery(connectDB)
query.prepare("INSERT INTO email (emailAddres) VALUES (:new_email)")
query.bindValue(":new_email", "new_add_email@test.com")
query.exec()
new_email_id = query.lastInsertId()

# 第二步:将新邮箱ID绑定到指定person记录的关联字段
# 示例:给新增的person行绑定新邮箱
new_person_row = rel_model.rowCount()
rel_model.insertRow(new_person_row)
rel_model.setData(rel_model.index(new_person_row, 1), new_email_id)
rel_model.setData(rel_model.index(new_person_row, 2), "新增人员姓名") # 其他person字段赋值
rel_model.submitAll()

如果你需要为同一个person添加多个邮箱,当前person为主表的关系模型无法直接支持,可单独实例化一个QSqlTableModel操作email表,通过过滤person关联ID的方式管理单个人员的所有邮箱。


内容的提问来源于stack exchange,提问作者accpert.com

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:24:02