如何使用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操作
内容的提问来源于stack exchange,提问作者accpert.com
相关产品推荐
相关产品推荐

