0

我正在使用 sqlite-utils 将 csv 加载到 sqlite 中,稍后将通过 Datasette 提供服务。我有两列,likes并且dislikes. 我想要第三列,quality-score将喜欢和不喜欢加在一起,然后将喜欢除以总数。

sqlite-utils convert函数应该是我最好的选择,但我在文档中看到的只是如何选择单个列进行转换。

sqlite-utils convert content.db articles headline 'value.upper()'

从给出的示例中,看起来convert后面是 db 文件名、表名,然后是您要操作的 col。是否可以简单地添加另一个列名,或者是否有一个标志可以选择多个列进行操作?如果这不可能,我会感到非常惊讶,我只是找不到任何文档来支持它。

4

1 回答 1

0

这不是一个完美的答案,因为它不能解决 sqlite-utils 是否支持转换的多列选择,但这就是我解决这个特定问题的方法。

由于我的quality_score专栏只是基础数学,我可以使用 sqlite 的Generated Columns。我创建了一个名为的文件quality_score.sql,其中包含:

ALTER TABLE testtable
ADD COLUMN quality_score GENERATED ALWAYS AS (likes /(likes + dislikes));

然后通过以下方式实现它:

$ sqlite3 mydb.db < quality_score.sql

您确实需要确保您使用的是兼容版本的 sqlite,因为这仅适用于 3.31 或更高版本。
另一个考虑因素是确保您对整数或浮点数而不是文本执行数学运算。

还尝试先使用虚拟生成的列创建表,然后再用我的数据填充它,但这在我的情况下不起作用 - 它抛出一个错误,指出提供的项目数与可用的列数不匹配. 所以我只是在事后坚持使用 ALTER 操作。

于 2021-09-26T22:32:17.197 回答