Разница между "=" и "соответствует" в sqlite3, Python? - PullRequest
2 голосов
/ 14 июля 2011

Два похожих запроса:

firstQuery = "select * from table_name where column_name = match_value"
secondQuery = "select * from table_name where column_name match match_value"

выполнение первого с использованием dbCursor.execute () работает нормально, но выполнение второго выдает:

sqlite3.OperationalError: unable to use function MATCH in the requested context

Может кто-нибудь объяснить мне, почему это?Спасибо.

Ответы [ 2 ]

4 голосов
/ 14 июля 2011

Из синтаксиса выражения sqlite документы:

Оператор MATCH - это специальный синтаксис для определенной в приложении функции match (). Реализация функции match () по умолчанию вызывает исключение и ни к чему не приводит. Но расширения могут переопределить функцию match () с помощью более полезной логики.

2 голосов
/ 07 июня 2012

В Python 2.7

import sqlite3

conn = sqlite3.connect(":memory:")

cur = conn.cursor()

cur.execute("create table test(v1 text, v2 int)")

for index in range(5):
    cur.execute("insert into test values(\"python ###{index}\", {index})".format(index=index))

import re
def matchPattern(pattern, value):
    return bool(re.match(pattern, value)) # return true or false

# creating the 'match' function.
conn.create_function("matchPattern", 2, matchPattern)

работает ...

i = cur.execute("select v1, v2 from test where matchPattern('python', v1)")
print i.fetchall()

# print -> ["python ### 1", 1), "python ### 2", 2), ..., ....]

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