Python 3.x 在sqlite3的WHERE子句中使用用户定义的函数

Python 3.x 在sqlite3的WHERE子句中使用用户定义的函数,python-3.x,sqlite,Python 3.x,Sqlite,使用Python3中的sqlite3库,我希望通过列是否匹配正则表达式来过滤列 我在这里发现了一个问题,似乎正是这样: 顶部答案中的函数接受参数expr,item,其中expr在参数化值中给出,而item是通过在列栏上迭代给出的单元格。我找不到任何文档表明WHERE子句中的单元格值被传递到自定义函数的最后一个参数中-它似乎应该是WHERE REGEXP(?,bar) 是否有明确记录此交互的地方?在sqlite中使用x REGEXP y时,如果存在同名函数,则会将其转换为REGEXP(y,x),否

使用Python3中的sqlite3库,我希望通过列是否匹配正则表达式来过滤列

我在这里发现了一个问题,似乎正是这样:

顶部答案中的函数接受参数
expr,item
,其中
expr
在参数化值中给出,而
item
是通过在列
栏上迭代给出的单元格。我找不到任何文档表明WHERE子句中的单元格值被传递到自定义函数的最后一个参数中-它似乎应该是
WHERE REGEXP(?,bar)


是否有明确记录此交互的地方?

在sqlite中使用
x REGEXP y
时,如果存在同名函数,则会将其转换为
REGEXP(y,x)
,否则会出现错误。(
LIKE
GLOB
的处理方式相同,但它们是由sqlite提供的,而不是依赖于扩展模块或用户定义的函数)

发件人:

REGEXP运算符是REGEXP()用户函数的特殊语法。默认情况下未定义regexp()用户函数,因此使用regexp运算符通常会导致错误消息。如果在运行时添加了名为“regexp”的应用程序定义的SQL函数,那么“X regexp Y”操作符将作为对“regexp(Y,X)”的调用来实现


非常感谢。这是否意味着不可能添加完全自定义的函数,比如说
其中x引出y
或类似的上下文相关函数?@snazzybouche不可能添加任意的新运算符,不。至少不需要进入并修改源代码。很高兴知道,谢谢。虽然我想你可以定义REGEXP来做任何你想做的事情,只要你只需要这样一个function@snazzybouche
MATCH/MATCH()。当然,对于正常的函数,你可以得到你想要的任何东西