Skip to content

ddrscott/sql-ninja

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Overview

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

Command Line Interface

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

Installation

pip install sql-ninja

Or add to requirements.txt

sql-ninja

Or add to setup.py

setup(
    install_requires=[
        'sql-ninja',
    ]

Docker

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

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/ddrscott/sql-ninja

License

The gem is available as open source under the terms of the MIT License.