Вам нужно правильно ЗАКАЗАТЬ свои аргументы SQL.
И под правильно цитируя Я имею в виду использование возможности цитаты, предоставляемой DBAPI, а не добавление 'вокруг вашей строки, что бесполезно.
Правильный код:
q = "%"+q+"%"
cursor.execute( 'SELECT * FROM table WHERE field LIKE %s', (q,) )
Действительно правильный код:
q = "%"+q.replace("%","%%")+"%"
cursor.execute( 'SELECT * FROM table WHERE field LIKE %s', (q,) )
Предположим, q = "a'bc"
Во-первых, переписать это как "% a'bc%"
Затем используйте его как обычный строковый аргумент. psycopg перепишет его как "% a \" bc% ", как и должно быть.
Если q может содержать «%» и вы хотите найти его, используйте второе.