sqlite3:用python创建函数regexp

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlite3:用python创建函数regexp相关的知识,希望对你有一定的参考价值。

Python 3.6。我正在尝试为sqlite3创建一个REGEXP函数。我有错误:OperationalError: wrong number of arguments to function REGEXP()

这是我的代码:

import sqlite3
import re

def fonctionRegex(mot):
    patternRecherche = re.compile(r""+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()

谢谢

答案

你做错了什么。这是更正确的例子

import sqlite3
import re


def functionRegex(value, pattern):
    c_pattern = re.compile(r"" + pattern.lower() + r"")
    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',)]
另一答案

documentation说:

REGEXP运算符是regexp()用户函数的特殊语法。 ...“X REGEXP Y”运算符将被实现为对“regexp(Y,X)”的调用。

您的函数必须有两个参数。

以上是关于sqlite3:用python创建函数regexp的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQLite3 和 Rails 3.1 中打开 REGEXP?

使用 Python 和 SQLite3 写入 .txt 文件

Python爬虫编程思想(83):用Python操作SQLite数据库

Python爬虫编程思想(83):用Python操作SQLite数据库

python 用Python的Sqlite3。 #python#sqlite3 #database

Python sqlite3 占位符