File tree Expand file tree Collapse file tree 3 files changed +28
-0
lines changed
Expand file tree Collapse file tree 3 files changed +28
-0
lines changed Original file line number Diff line number Diff line change 1010 Like ,
1111 NotEqual ,
1212 NotIn ,
13+ NotLike
1314)
1415from ..custom_types import Iterable
1516from .combination import Where
@@ -45,6 +46,11 @@ def like(self, value: str) -> Where:
4546 raise ValueError ('% is required for like operators' )
4647 return Where (column = self , value = value , operator = Like )
4748
49+ def not_like (self , value : str ) -> Where :
50+ if '%' not in value :
51+ raise ValueError ('% is required for like operators' )
52+ return Where (column = self , value = value , operator = NotLike )
53+
4854 def format_value (self , value ):
4955 """
5056 Takes the raw Python value and return a string usable in the database
Original file line number Diff line number Diff line change @@ -22,6 +22,10 @@ class Like(Operator):
2222 template = "{name} LIKE {value}"
2323
2424
25+ class NotLike (Operator ):
26+ template = "{name} NOT LIKE {value}"
27+
28+
2529class GreaterThan (Operator ):
2630 # Add permitted types???
2731 template = "{name} > {value}"
Original file line number Diff line number Diff line change @@ -47,6 +47,24 @@ def test_where_like(self):
4747 [{'name' : 'Pythonistas' }]
4848 )
4949
50+ def test_where_not_like (self ):
51+ self .insert_rows ()
52+
53+ response = Band .select .columns (
54+ Band .name
55+ ).where (
56+ Band .name .not_like ('Python%' )
57+ ).order_by (
58+ Band .name
59+ ).run_sync ()
60+
61+ print (f'response = { response } ' )
62+
63+ self .assertEqual (
64+ response ,
65+ [{'name' : 'CSharps' }, {'name' : 'Rustaceans' }]
66+ )
67+
5068 def test_where_greater_than (self ):
5169 self .insert_rows ()
5270
You can’t perform that action at this time.
0 commit comments