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.sqlTemplates 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 messageThen 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 messageIn bar.sql lets try including foo.sql:
SELECT * FROM ({% include 'foo.sql' %}) as t1The rendered SQL would be:
SELECT * FROM (SELECT 'Hello World' as message) as t1The 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 messagepip install sql-ninjaOr add to requirements.txt
sql-ninjaOr 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 completeBug 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.