sqlite3: создать функцию регулярного выражения с Python - PullRequest
0 голосов
/ 27 апреля 2018

Python 3.6. Я пытаюсь создать функцию REGEXP для sqlite3. У меня ошибка: OperationalError: wrong number of arguments to function REGEXP()

Вот мой код:

import sqlite3
import re

def fonctionRegex(mot):
    patternRecherche = re.compile(r"\b"+mot.lower()+"\\b")
    return patternRecherche.search(item) is not None

dbName = 'bdd.db'
connexion = sqlite3.connect(dbName)
leCursor = connexion.cursor()
connexion.create_function("REGEXP", 1, fonctionRegex)

mot = 'trump'
data = leCursor.execute('SELECT * FROM tweet WHERE texte REGEXP ?',mot).fetchall()

Спасибо

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Вы делаете что-то не так. Это более правильный пример

import sqlite3
import re


def functionRegex(value, pattern):
    c_pattern = re.compile(r"\b" + pattern.lower() + r"\b")
    return c_pattern.search(value) is not None


connection = sqlite3.connect(':memory:')
cur = connection.cursor()
cur.execute('CREATE TABLE tweet(msg TEXT)')
cur.execute('INSERT INTO tweet VALUES("This is a test message")')
cur.execute('INSERT INTO tweet VALUES("Another message")')

connection.create_function("REGEXP", 2, functionRegex)

print(cur.execute('SELECT * FROM tweet WHERE REGEXP(msg, ?)', ('test',)).fetchall())
print(cur.execute('SELECT * FROM tweet WHERE REGEXP(msg, ?)', ('message',)).fetchall())
print(cur.execute('SELECT * FROM tweet WHERE ? REGEXP msg', ('message',)).fetchall())

напечатает

[('This is a test message',)]
[('This is a test message',), ('Another message',)]
[('This is a test message',), ('Another message',)]
0 голосов
/ 27 апреля 2018

Документация гласит:

Оператор REGEXP - это специальный синтаксис для пользовательской функции regexp (). … Оператор «X REGEXP Y» будет реализован как вызов «regexp (Y, X)».

Ваша функция должна иметь два параметра.

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