diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2017-01-16 16:27:48 -0500 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2017-01-16 16:27:48 -0500 |
| commit | 46828cc157a48d73352a3a910798b705aa23f0d5 (patch) | |
| tree | 8badf3aa618efd12002d7bec7334de493b49ed52 | |
| parent | d8198c2d8779d52a94dc53b0a1582279d6d58fef (diff) | |
| download | sqlalchemy-46828cc157a48d73352a3a910798b705aa23f0d5.tar.gz | |
- correctly document LIKE / ILIKE, fixes #3890
Change-Id: Ie59e61f53d7c59a4777ab9e6e75a43c71d67523b
| -rw-r--r-- | doc/build/orm/tutorial.rst | 15 | ||||
| -rw-r--r-- | lib/sqlalchemy/sql/operators.py | 22 |
2 files changed, 30 insertions, 7 deletions
diff --git a/doc/build/orm/tutorial.rst b/doc/build/orm/tutorial.rst index 6a7d75fb0..91c6202e1 100644 --- a/doc/build/orm/tutorial.rst +++ b/doc/build/orm/tutorial.rst @@ -759,13 +759,26 @@ Here's a rundown of some of the most common operators used in query.filter(User.name.like('%ed%')) + .. note:: :meth:`.ColumnOperators.like` renders the LIKE operator, which + is case insensitive on some backends, and case sensitive + on others. For guaranteed case-insensitive comparisons, use + :meth:`.ColumnOperators.ilike`. + +* :meth:`ILIKE <.ColumnOperators.ilike>` (case-insensitive LIKE):: + + query.filter(User.name.ilike('%ed%')) + + .. note:: most backends don't support ILIKE directly. For those, + the :meth:`.ColumnOperators.ilike` operator renders an expression + combining LIKE with the LOWER SQL function applied to each operand. + * :meth:`IN <.ColumnOperators.in_>`:: query.filter(User.name.in_(['ed', 'wendy', 'jack'])) # works with query objects too: query.filter(User.name.in_( - session.query(User.name).filter(User.name.like('%ed%')) + session.query(User.name).filter(User.name.like('%ed%')) )) * :meth:`NOT IN <.ColumnOperators.notin_>`:: diff --git a/lib/sqlalchemy/sql/operators.py b/lib/sqlalchemy/sql/operators.py index 49744568a..d88339299 100644 --- a/lib/sqlalchemy/sql/operators.py +++ b/lib/sqlalchemy/sql/operators.py @@ -398,13 +398,16 @@ class ColumnOperators(Operators): return self.operate(concat_op, other) def like(self, other, escape=None): - """Implement the ``like`` operator. + r"""Implement the ``like`` operator. - In a column context, produces the clause ``a LIKE other``. + In a column context, produces the expression:: + + a LIKE other E.g.:: - select([sometable]).where(sometable.c.column.like("%foobar%")) + stmt = select([sometable]).\ + where(sometable.c.column.like("%foobar%")) :param other: expression to be compared :param escape: optional escape character, renders the ``ESCAPE`` @@ -420,13 +423,20 @@ class ColumnOperators(Operators): return self.operate(like_op, other, escape=escape) def ilike(self, other, escape=None): - """Implement the ``ilike`` operator. + r"""Implement the ``ilike`` operator, e.g. case insensitive LIKE. + + In a column context, produces an expression either of the form:: + + lower(a) LIKE lower(other) + + Or on backends that support the ILIKE operator:: - In a column context, produces the clause ``a ILIKE other``. + a ILIKE other E.g.:: - select([sometable]).where(sometable.c.column.ilike("%foobar%")) + stmt = select([sometable]).\ + where(sometable.c.column.ilike("%foobar%")) :param other: expression to be compared :param escape: optional escape character, renders the ``ESCAPE`` |
