Problem with regexp python and sqlite
I try to check a string with a pattern using a regex with python on a sqlite database. I have problem when I try de search string having " with a patern using " For exemple:
cur.execute("insert into articles(id,subject) values (1,'aaa\"test\"')")
cur.execute("select id,subject from articles where id = 1")
print (cur.fetchall())
cur.execute("select subject from articles where subject regexp '\"test\"' ")
print (cur.fetchall())
I should \" before regexp other way compiler dont like... syntaxe error
[(1, 'aaa"test"')]
[] <????? should found
Somebody know how to do that ?
My regexp function :con.create_function("regexp", 2, regexp)
Solution 1:
Use parametrized sql. Then you don't need to escape the quotes yourself:
import sqlite3
import re
def regexp(expr, item):
reg = re.compile(expr)
return reg.search(item) is not None
conn = sqlite3.connect(':memory:')
conn.create_function("REGEXP", 2, regexp)
cursor = conn.cursor()
cursor.execute('CREATE TABLE foo (bar TEXT)')
cursor.executemany('INSERT INTO foo (bar) VALUES (?)',[('aaa"test"',),('blah',)])
cursor.execute('SELECT bar FROM foo WHERE bar REGEXP ?',['"test"'])
data=cursor.fetchall()
print(data)
yields
[(u'aaa"test"',)]
Solution 2:
You can use triple escapes, or a raw string.
Your doing:
>>> print("select subject from articles where subject regexp '\"test\"' ") select subject from articles where subject regexp '"test"'
Use a raw string, which is a r'string with a r in front'
:
>>> print(r"select subject from articles where subject regexp '\"test\"' ") select subject from articles where subject regexp '\"test\"'
Or triple escapes (\\\
):
>>> print("select subject from articles where subject regexp '\\\"test\\\"' ") select subject from articles where subject regexp '\"test\"'