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} |
|
new_movie IN (lower(movie), lower(%(p1)s), lower('James')) |
{'p1': 'Ridley'} |