Skip to content

Predicates

Use predicates.py module to compare columns, values, parameters or function results. Basic predicates (without suffix) compares a column with SQL parameter / value / expression. Example:

from david8.predicates import eq
from david8.expressions import val as v, param as p
from david8.functions import concat

(
    qb.select(
        eq('movie', 'Aliens').as_('is_aliens'),
        eq('beer', v(0.5)).as_('is_zero_five'),
        eq('age', p(27)).as_('is_27'),
        eq('full_name', concat('name', val(' '), 'last_name')).as_('is_the_same'),
    )
).get_sql()

# SELECT movie = %(p1)s AS is_aliens,
#        beer = 0.5 AS is_zero_five,
#        age = %(p2)s AS is_27, 
#        full_name = concat(name, ' ', last_name) AS is_the_same
# {'p1': 'Aliens', 'p2': 27}

Use col() expression or predicates with the _c(columns) suffix to compare columns:

from david8.predicates import ne, eq_c
from david8.expressions import col as c

qb.select(eq_c('name', 'last_name').as_('is_the_same')).get_sql()
# SELECT name = last_name AS is_the_same

qb.select(ne('column_1', c('column_2')).as_('alias')).get_sql()
# SELECT column_1 != column_2 AS alias

Predicates table

python sql parameters
between('last_visit', '2023-01-01', '2024-01-01') last_visit BETWEEN %(p1)s AND %(p2)s see test {'p1': '2023-01-01', 'p2': '2024-01-01'}
eq('col_name', 'parameter') col_name = %(p1)s {'p1': 'parameter'}
le('col_name', 65) col_name <= %(p1)s {'p1': 65}
gt('col_name', 7) col_name > %(p1)s {'p1': 7}
ge('col_name', 9) col_name >= %(p1)s {'p1': 9}
ge(length('name'), length('last_name')) length(name) >= length(last_name)
lt('col_name', 27) col_name < %(p1)s {'p1': 27}
ne('col_name', 'name') col_name != %(p1)s {'p1': 'name'}
eq_c('column1', 'column2') column1 = column2
le_c('column1', 'column2') column1 <= column2
gt_c('column1', 'column2') column1 > column2
ge_c('column1', 'column2') column1 >= column2
lt_c('column1', 'column2') column1 < column2
ne_c('column1', 'column2') column1 != column2
is_true('is_active') is_active IS TRUE
is_not_true('is_active') is_active IS NOT TRUE
is_false('is_active') is_active IS FALSE
is_not_false('is_active') is_active IS NOT FALSE
is_null('is_active') is_active IS NULL
is_not_null('is_active') is_active IS NOT NULL
in_('status', [1, 2, 3]) status IN (1, 2, 3)
in_('status', [1, 2, 3], True) status IN (%(p1)s, %(p2)s, %(p3)s) {'p1': 1, 'p2': 2, 'p3': 3}
in_(
  'new_movie',
  [
   lower('movie'),
   lower(param('Ridley')),
   lower(val('James'))
  ]
 )
new_movie IN (lower(movie), lower(%(p1)s), lower('James')) {'p1': 'Ridley'}