JinjaSQL2

raw JSON →
0.1.12 verified Fri May 01 auth: no python

Generate SQL queries and corresponding bind parameters using Jinja2 templates. Version 0.1.12 is the latest, with recent security upgrades and removal of older Python support. Release cadence is irregular, primarily for bug fixes and security updates.

pip install jinjasql2
error ModuleNotFoundError: No module named 'jinjasql2'
cause Importing from 'jinjasql2' instead of 'jinjasql'.
fix
Change import to 'from jinjasql import JinjaSql'.
error jinjasql.exceptions.TemplateSyntaxError: Unexpected token '{{'
cause Using Jinja2 template syntax without binding parameters correctly, or using identifier clause in version <0.1.9.
fix
Ensure template syntax is correct and consider upgrading to 0.1.9+ for identifier support.
error AttributeError: 'JinjaSql' object has no attribute 'prepare_query'
cause Using older API; 'prepare_query' was added in 0.1.8? Check docs.
fix
Use 'prepare_query' method; if it's missing, upgrade jinjasql2.
breaking Version 0.1.10 dropped support for Python 3.6 and lower. Use Python 3.7+.
fix Upgrade Python to 3.7 or later.
gotcha The package name is 'jinjasql2' but the import module is 'jinjasql'. Do not import from 'jinjasql2'.
fix Use 'from jinjasql import JinjaSql'.
deprecated Old-style param_style 'format' and 'pyformat' may be deprecated. Use 'named' or 'qmark'.
fix Set param_style='named' or 'qmark' to avoid issues.
gotcha Identifier clauses (e.g., dynamic table names) are only supported in version 0.1.9+. Using them in older versions will cause syntax errors.
fix Upgrade to 0.1.9+ or avoid identifier syntax.

Basic usage: create a JinjaSql instance, pass a Jinja template and parameters, get SQL and bind parameters.

from jinjasql import JinjaSql

j = JinjaSql(param_style='named')
template = "SELECT * FROM mytable WHERE id = {{ id }}"
query, bind_params = j.prepare_query(template, {'id': 10})
print(query)   # SELECT * FROM mytable WHERE id = :id
print(bind_params)  # {'id': 10}