我有一个连接到QSqlRelationalTableModel的QTableView。一切都如预期的那样工作,然而,在我的模型中似乎不可能有sqlite3生成的列:
bhd [INTEGER] GENERATED ALWAYS AS (round(d_mess * 130 / bhd_hoehe)) STORED
上面的语句是在sqlite3中添加生成列的默认方式。但它没有出现在我的模型中。当我将该列更改为标准整数列时,它就在那里。生成的列是STORED还是VIRTUAL类型,或者我是否省略了generated ALWAYS关键字,都无关紧要。
这是故意的吗?还是sqlite3驱动程序问题?
视图似乎不受此问题的影响。我知道这更多的是一种变通方法,而不是解决方案,但您可以只使用foreign key
和生成的字段创建伪视图。
例如,我有一个简单的表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
);
照原样,没有指向User.full_name
的QSqlRelation
可以工作,正如您所指出的。然而,我创建了一个类似的简单视图
CREATE VIEW UserFullNameView AS
SELECT ID,
full_name
FROM User;
现在以下绑定工作良好
model: QSqlRelationalTableModel
model.setRelation(foreign_field, QSqlRelation('UserFullNameView', 'ID', 'full_name')