我想在Python中向SQLite添加一个函数(如here所述)我的函数返回多个值,在python中,我可以通过索引(使用[])访问不同的返回值。然而,似乎索引在SQLite中不起作用。换句话说,下面的SELECT语句将有一个错误:
[]
SELECT my_function(table1.column1)[0] FROM table1;
sqlite3.OperationalError:用户定义函数引发异常有没有办法在SQLite中访问不同的返回值?
mf98qq941#
从函数返回多个值的唯一方法是使用表值函数,这需要创建一个虚拟表模块,而只有默认的Python SQLite驱动程序无法实现这一点。还有其他Python模块可以实现这一点,例如sqlite-vtfunc。
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编码/解码似乎没有引入明显的性能损失。
2条答案
按热度按时间mf98qq941#
从函数返回多个值的唯一方法是使用表值函数,这需要创建一个虚拟表模块,而只有默认的Python SQLite驱动程序无法实现这一点。
还有其他Python模块可以实现这一点,例如sqlite-vtfunc。
plupiseo2#
一种方法是让函数返回一个字符串,其中包含编码为JSON数组的多个值,然后使用SQLite JSON提取函数访问各个值:
我自己也用过这个解决方案,性能还可以,JSON编码/解码似乎没有引入明显的性能损失。