在Python中向SQLite添加具有多个返回值的函数

093gszye  于 2022-12-27  发布在  SQLite
关注(0)|答案(2)|浏览(173)

我想在Python中向SQLite添加一个函数(如here所述)
我的函数返回多个值,在python中,我可以通过索引(使用[])访问不同的返回值。
然而,似乎索引在SQLite中不起作用。换句话说,下面的SELECT语句将有一个错误:

SELECT my_function(table1.column1)[0] FROM table1;

sqlite3.OperationalError:用户定义函数引发异常
有没有办法在SQLite中访问不同的返回值?

mf98qq94

mf98qq941#

从函数返回多个值的唯一方法是使用表值函数,这需要创建一个虚拟表模块,而只有默认的Python SQLite驱动程序无法实现这一点。
还有其他Python模块可以实现这一点,例如sqlite-vtfunc

plupiseo

plupiseo2#

一种方法是让函数返回一个字符串,其中包含编码为JSON数组的多个值,然后使用SQLite JSON提取函数访问各个值:

select json_extract(fout, $[0]) as v0,
       json_extract(fout, $[1]) as v1
from (select my_func(cols...) as fout
      from ...)

我自己也用过这个解决方案,性能还可以,JSON编码/解码似乎没有引入明显的性能损失。

相关问题