8

I am trying to query a database for records that have a string field inside an input search string.

Something like this:

User.query.filter(User.name in search_string)

Of course that does not work since it is not a valid SQLAlchemy statement. This seems a simple problem but I really can't find the right column operator.

I tried the in_ operator:

User.query.filter(User.name.in_(search_string)

But that of course is not working. What I need is a is_substring operator.

2 Answers 2

13

In SQL it would be

SELECT * FROM user 
WHERE 'search string' LIKE CONCAT('%', name, '%')

SQLAlchemy contains(other) produces the clause LIKE '%<other>%'

from sqlalchemy import literal

User.query.filter(literal(search_string).contains(User.name))
Sign up to request clarification or add additional context in comments.

1 Comment

Awesome! If we want to compare ignoring cases, we may use: from sqlalchemy import func then User.query.filter(func.lower(literal(search_string)).contains(func.lower(User.name)))
6

Try this:

User.query.filter(User.name.match(search_string)) or

User.query.filter(User.name.contains(search_string))

For use in_ you have to use a list, like that:

search_string = ['ed', 'wendy', 'jack']

User.query.filter(User.name.in_(search_string))

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.