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.