SQL + Jinja Done Right™
This project is a thin wrapper around Jinja templates to help manage the generation of SQL.
In your project create a directory name sql/templates
to manage your SQL files:
. └── sql └── templates ├── foo.sql └── bar.sql
Templates are also search from the current working directory and will have priority over files in sql/templates
.
An example foo.sql
might be:
SELECT '{{msg}}' as message
Then to access the SQL template use the following Python snippet:
from sqlninja import engine as sqlninja query = sqlninja.render("foo.sql", msg="Hello World")
The resulting query
would be:
SELECT 'Hello World' as message
In bar.sql
lets try including foo.sql
:
SELECT * FROM ({% include 'foo.sql' %}) as t1
The rendered SQL would be:
SELECT * FROM (SELECT 'Hello World' as message) as t1
The Python interface makes sense at runtime, but for development the CLI is more convenient.
The library installs a CLI script: sql
$ sql --help Usage: sql [OPTIONS] SRC Options: --template_path TEXT Base directory where SQL templates are located. Defaults to `sql/templates` --help Show this message and exit.
To see the resulting SQL we can try:
sql foo.sql msg='Hello World' # => SELECT 'Hello World' as message
pip install sql-ninja
Or add to requirements.txt
sql-ninja
Or add to setup.py
setup( install_requires=[ 'sql-ninja', ]
Docker users can pull directly from ddrscott/sql-ninja
docker run --rm -v $PWD:/app -w /app ddrscott/sql-ninja sample.sql # ^ ^ ^ ^ ^ # | | | | | # | | | | + the template # | | | | # | | | + the image # | | | # | | + start in /app path # | | # | + volume mount current path to /app # | # + remove container when complete
Bug reports and pull requests are welcome on GitHub at https://github.com/ddrscott/sql-ninja
The gem is available as open source under the terms of the MIT License.