首页 > 编程问答 >QSqlRelationalTableModel 附加相关列

QSqlRelationalTableModel 附加相关列

时间:2024-07-31 09:29:12浏览次数:16  
标签:python qt sqlite pyqt pyside

我有一个 QSqlRelationalTableModel 设置到另一个表,工作得很好。现在,我想在相关表上查找该行的其他列。我该如何实现这一点? QSqlRelation 示例表:

到目前为止我所拥有的:

city ('id', 'name', 'state_id')
state ('id', 'name', 'capital')

这会给我一行像:

model = QtSql.QSqlRelationalTableModel()
model.setTable('city')
model.setRelation(2, QtSql.QSqlRelation("state", "id", "name"))
model.select()

现在我想从状态模型中查找资本城市表。我该怎么做呢?我对

| 1 | 'San Francisco' | 'California' |

的理解是,它从 X 列的 main_table 中获取 id 并将其替换为映射列,但我不想更改状态表。我已经研究过 setRelation QSqlRecord ,但我似乎遗漏了一些东西。 QSqlRelation 谢谢!

Thanks!


可以使用 QSqlRelationalTableModel 的 setData() 函数和 QSqlTableModel 的 record() value() 函数来实现这一点。

以下是一个示例,说明如何在 city 模型中添加一个名为 capital 的新列,该列显示 state 模型中对应行的 capital 值:

import PyQt5.QtSql as QtSql

# ...(的现有代码)

# 获取状态模型
state_model = model.relationModel(2)

# 遍历城市模型中的每一行
for row in range(model.rowCount()):
    # 获取状态 ID
    state_id = model.data(model.index(row, 2)) # 2 是 state_id 列的索引

    # 在状态模型中查找相应的行
    state_model.setFilter(f"id = {state_id}")
    state_model.select()

    # 获取 capital 值
    capital = state_model.record(0).value("capital") if state_model.rowCount() > 0 else ""

    # 将 capital 值设置到城市模型的新列中
    model.setData(model.index(row, model.columnCount()), capital)

# 添加新列标题
model.setHeaderData(model.columnCount() - 1, Qt.Horizontal, "Capital")

这段代码做了以下几件事:

  1. 获取状态模型: 使用 relationModel() 函数获取与 state_id 列关联的状态模型。
  2. 遍历城市模型: 遍历城市模型中的每一行。
  3. 获取状态 ID: 获取当前行的 state_id 值。
  4. 查找状态行: 使用 setFilter() 函数在状态模型中找到具有匹配 id 的行。
  5. 获取 capital 值: 使用 record() value() 函数从找到的状态行中获取 capital 值。
  6. 设置 capital 值: 使用 setData() 函数将 capital 值设置到城市模型的新列中。
  7. 添加列标题: 使用 setHeaderData() 函数为新列设置标题。

这将为的 city 模型添加一个名为 Capital 的新列,该列显示每个城市对应州的 capital 值。

标签:python,qt,sqlite,pyqt,pyside
From: 36437055

相关文章

  • python3 unittest+BeautifulReport单个进程输出多个测试报告
    最近一个项目中需要由于输出的案例内容非常多(上万条),导致BeautifulReport输出的报告内容非常大(几百兆)。浏览器无法正常处理这么大的测试报告,就算打开了,也不方便阅读和处理,因此需要将报告分成多个输出。经修改代码,发现单个进程内输出多个测试报告出现问题:第一个测试报告能正常数据......
  • 具有自引用的类装饰器的 Python 类型提示
    我的最终目标是编写一个系统来轻松记录函数调用(特别是类方法)。我首先编写一个带有包装方法的类Loggable,该方法允许我装饰子类方法并记录它们的调用|||现在我可以编写子类并记录它们的调用:Param=ParamSpec("Param")RetType=TypeVar("RetType")CountType=......
  • 如何在for循环中使用curve_fit函数在python中一次性创建多个回归?
    简而言之,我有两个矩阵,一个称为t,另一个称为y。每个都有7列。假设它们被称为a、b、c、d、e、f和g。我想要的是从a对a、b对b、...、g对g这两个矩阵进行回归。我已经设法使我的算法使用curve_fit对一列进行回归一次。但我真正希望的是它能够一次性完成7个回归......
  • 激活虚拟环境会让python消失?
    VisualStudioCode终端的屏幕截图如屏幕截图所示,python在Powershell中运行得很好。然后我在E:\DrewFTCAPI\ftcapivenv激活虚拟环境,然后python就消失了。不仅没有消失,它不运行任何东西,也不产生任何输出。我至少预计会出现某种类型的"python"i......
  • Python 3.6 中的相互递归类型,使用命名元组语法
    我正在尝试实现图的节点和边。这是我的代码:fromtypingimportNamedTuple,ListclassNode(NamedTuple):name:stredges:List[Edge]classEdge(NamedTuple):src:Nodedest:Node这会引发错误,因为创建Edge时未定义Node类型。......
  • 使用 keras 模型对函数进行 Python 类型提示
    如果我创建这样的函数:defmdl(input_shape):model=Sequential()model.add(Conv2D(depth=64,kernel_size=(3,3),input_shape=input_shape,activation='relu'))model.add(Dense(32),activation='relu')model.add(Dropout(0.3))m......
  • Python:自动完成可以用于列表中的元素吗?
    Python在函数参数和函数返回类型中具有类型提示。类的元素是否有类似的东西?我希望能够在如下示例中使用自动完成功能:classMyClass:defhello(self):print("Hello")mylist=[]mylist.append(MyClass())foriinmylist:i.hello()#Noautocomplete......
  • python 中 COM 对象的正确类型提示是什么?
    我在python中使用COM对象来向3rd方软件公开可编程接口。这是通过使用Dispatchfromwin32com.client来实现的。我的项目也一直在使用python.3.7中的类型提示,但是我不确定如何为了类型提示的目的定义这些COM对象的类型。这个问题涉及我拥有的所有COM......
  • 如何遍历Python字典同时避免KeyErrors?
    解析大型JSON时,某些键可能仅在某些情况下存在,例如出现错误时。从服务器的API获取200OK的情况并不少见,但是您得到的响应包含应检查的错误。处理此问题的最佳方法是什么?我知道使用类似||之类的东西。|是处理KeyError的一种方法。get()但是如果......
  • Python 中的递归数据类型
    Python中最接近Haskell中的递归数据类型的是什么?(即在定义自身时使用类型自己的定义。)编辑:为了给出递归类型的更具体定义,下面是Haskell中的二叉树:dataTreea=Leafa|Branch(Treea)(Treea)我的阅读方式如下:二叉树可以是叶子,也可以包含两......