def like(self, **kwargs):
new = []<EOL>for k, v in kwargs.items():<EOL><INDENT>v = self._check(k, v, '<STR_LIT>')<EOL>new.append(Pattern(k, v))<EOL><DEDENT>return self.replace(filters=self._filters+tuple(new))<EOL>
When provided with keyword arguments of the form ``col=pattern``, this
will limit the entities returned to those that include the provided
pattern. Note that 'like' queries require that the ``prefix=True``
option must have been provided as part of the column definition.

Patterns allow for 4 wildcard characters, whose semantics are as
follows:

    * *?* - will match 0 or 1 of any character
    * *\** - will match 0 or more of any character
    * *+* - will match 1 or more of any character
    * *!* - will match exactly 1 of any character

As an example, imagine that you have enabled the required prefix
matching on your ``User.email`` column. And lets say that you want to
find everyone with an email address that contains the name 'frank'
before the ``@`` sign. You can use either of the following patterns
to discover those users.

    * *\*frank\*@*
    * *\*frank\*@*

.. note:: Like queries implicitly start at the beginning of strings
  checked, so if you want to match a pattern that doesn't start at
  the beginning of a string, you should prefix it with one of the
  wildcard characters (like ``*`` as we did with the 'frank' pattern).