Использование пользовательской функции в предложении WHERE в sqlite3 - PullRequest
0 голосов
/ 17 июня 2019

Используя библиотеку sqlite3 в Python 3, я пытаюсь отфильтровать столбец по тому, соответствует ли он регулярному выражению.

Я нашел здесь вопрос, который, кажется, делает именно это: Проблема с регулярным выражением Python и sqlite

Функция в верхнем ответе принимает аргументы expr, item, где expr задается в параметризованном значении, а item - это ячейка, полученная при итерации по столбцу bar. Я не могу найти никакой документации, которая бы указывала, что значение ячейки в предложении WHERE передается в последний параметр пользовательской функции - похоже, это должно быть WHERE REGEXP(?,bar)?

Есть ли где-нибудь явное документальное подтверждение этого взаимодействия?

1 Ответ

1 голос
/ 17 июня 2019

Когда вы используете x REGEXP y в sqlite, оно превращается в regexp(y, x), если функция с таким именем существует, и ошибка в противном случае. (LIKE и GLOB обрабатываются одинаково, за исключением того, что они предоставляются sqlite вместо того, чтобы полагаться на модуль расширения или пользовательскую функцию).

С документация :

Оператор REGEXP - это специальный синтаксис для пользовательской функции regexp (). По умолчанию пользовательская функция regexp () не определена, поэтому использование оператора REGEXP обычно приводит к сообщению об ошибке. Если определенная приложением функция SQL с именем «regexp» добавляется во время выполнения, то оператор «X REGEXP Y» будет реализован как вызов «regexp (Y, X)».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...