SQLite3 生成的列未显示在 QSqlRelationalTableModel 中

问题描述 投票:0回答:1

我有一个连接到 QSqlRelationalTableModel 的 QTableView。一切都按预期工作,但是,在我的模型中似乎不可能有 sqlite3 生成的列:

bhd [INTEGER] GENERATED ALWAYS AS (round(d_mess * 130 / bhd_hoehe)) STORED

上面的语句是sqlite3中添加生成列的默认方式。但它没有出现在我的模型中。当我将该列更改为标准整数列时,它就在那里。 生成的列是 STORED 类型还是 VIRTUAL 类型,或者省略 GENERATED ALWAYS 关键字都没有关系。

这是设计使然吗?还是 sqlite3 驱动程序问题?

sqlite qt pyside6 qsqlrelationaltablemodel
1个回答
1
投票

观看次数似乎不受此问题的影响。我知道这更像是一种解决方法,而不是解决方案,但您可以仅使用 foreign key 和生成的字段创建一个

dummy
视图。

例如,我有一个简单的表格

User
,如下所示:

CREATE TABLE User (
    ID        INTEGER PRIMARY KEY AUTOINCREMENT
                      UNIQUE,
    name      TEXT,
    surname   TEXT,
    title      TEXT,
    full_name         GENERATED ALWAYS AS (title || ' ' || surname || ' ' || name) STORED
);

照原样,正如您所指出的,指向

QSqlRelation
User.full_name
不起作用。但是,我创建了一个简单的视图,例如

CREATE VIEW UserFullNameView AS
    SELECT ID,
           full_name
      FROM User;

现在以下绑定工作正常

model: QSqlRelationalTableModel
model.setRelation(foreign_field, QSqlRelation('UserFullNameView', 'ID', 'full_name')

其中

foreign_field
User.full_name
的索引,它将被映射为
UserFullNameView.full_name
字段。

© www.soinside.com 2019 - 2024. All rights reserved.