Skip to content

Quick Start

Danila Ganchar edited this page Nov 20, 2025 · 45 revisions

⚠️ Most examples in the documentation will use this configuration to avoid unnecessary qb initialization / imports / prints etc ⚠️

Default query builder initialization:

from logging.config import dictConfig
from david8 import get_default_qb


# enable logging
dictConfig({
    'version': 1,
    'formatters': {'standard': {'format': '[%(levelname)s]: %(message)s'}},
    'handlers': {
        'default': {
            'level': 'INFO',
            'formatter': 'standard',
            'class': 'logging.StreamHandler',
            'stream': 'ext://sys.stdout',
        },
    },
    'loggers': {
        '': {'handlers': ['default'], 'level': 'INFO'},
        'david8': {'propagate': True},
    }
})

qb = get_default_qb()

By default david8 will use PyFormatParamStyle with disabled quote_mode. But you can change query parameter / placeholder style or enable quote_mode like this:

for _qb in [
    get_default_qb(),
    get_default_qb(is_quote_mode=True),
    get_default_qb(QMarkParamStyle()),
    get_default_qb(NumericParamStyle()),
    get_default_qb(NamedParamStyle()),
    get_default_qb(FormatParamStyle()),
]:
    query = (
        _qb.select(
            param(1).as_('first_param'),
            param(2).as_('second_param'),
            'column_name'
        )
        .from_table('table_name')
    )

    # to see logging info and generate query parameters
    query.get_sql()
    # how to get SELECT parameters
    print(query.get_parameters())
    print(query.get_tuple_parameters())
    print(query.get_list_parameters())


# [INFO]: SELECT %(p1)s AS first_param, %(p2)s AS second_param, column_name FROM table_name {'p1': 1, 'p2': 2}
# {'p1': 1, 'p2': 2}
# (1, 2)
# [1, 2]
# [INFO]: SELECT %(p1)s AS "first_param", %(p2)s AS "second_param", "column_name" FROM "table_name" {'p1': 1, 'p2': 2}
# {'p1': 1, 'p2': 2}
# (1, 2)
# [1, 2]
# [INFO]: SELECT ? AS first_param, ? AS second_param, column_name FROM table_name {'1': 1, '2': 2}
# {'1': 1, '2': 2}
# (1, 2)
# [1, 2]
# [INFO]: SELECT $1 AS first_param, $2 AS second_param, column_name FROM table_name {'1': 1, '2': 2}
# {'1': 1, '2': 2}
# (1, 2)
# [1, 2]
# [INFO]: SELECT :p1 AS first_param, :p2 AS second_param, column_name FROM table_name {'p1': 1, 'p2': 2}
# {'p1': 1, 'p2': 2}
# (1, 2)
# [1, 2]
# [INFO]: SELECT %s AS first_param, %s AS second_param, column_name FROM table_name {'1': 1, '2': 2}
# {'1': 1, '2': 2}
# (1, 2)
# [1, 2]

Clone this wiki locally