我有一个连接到 QSqlRelationalTableModel 的 QTableView。一切都按预期工作,但是,在我的模型中似乎不可能有 sqlite3 生成的列:
bhd [INTEGER] GENERATED ALWAYS AS (round(d_mess * 130 / bhd_hoehe)) STORED
上面的语句是sqlite3中添加生成列的默认方式。但它没有出现在我的模型中。当我将该列更改为标准整数列时,它就在那里。 生成的列是 STORED 类型还是 VIRTUAL 类型,或者省略 GENERATED ALWAYS 关键字都没有关系。
这是设计使然吗?还是 sqlite3 驱动程序问题?
观看次数似乎不受此问题的影响。我知道这更像是一种解决方法,而不是解决方案,但您可以仅使用 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
字段。