Skip to content

enkeksi takes a markdown-formatted input and executes the sql queries found in it, and returns a markdown-formatted output where the results of the sql queries have been added.

License

Notifications You must be signed in to change notification settings

ahojukka5/enkeksi

Repository files navigation

enkeksi - Markdown-SQL evaluator

Python CI Coverate Status Documentation Status

Package author: Jukka Aho (@ahojukka5, ahojukka5@gmail.com)

enkeksi takes a markdown-formatted input and executes the sql queries found in it, and returns a markdown-formatted output where the results of the sql queries have been added. Package can be used, for example, to create a dynamic project documentation where SQL queries are automatically executed to get example results in a dynamic manner. This way it is easy to spot from the non-working documentation is there is problems with the database.

enkeksi comes with a command line tool markdown-sql-eval which can be used to process markdown files efficiently.

Project is hosted in GitHub: https://github.com/ahojukka5/enkeksi.

Documentation is hosted in ReadTheDocs: https://enkeksi.readthedocs.io/.

Releases are hosted in PyPi: https://pypi.org/project/enkeksi/.

Installing package

To install the most recent package from Python Package Index (PyPi), use git:

pip install enkeksi

To install the development version, you can install the package directly from the GitHub:

pip install git+git://github.com/ahojukka5/enkeksi.git

CLI Usage

Consider the following demo markdown file:

# Sample file

Hello, this is a sample file. Below, we initialize some test data to sqlite
database. It doesn't show in the final output, because of `--hide-input` flag.

```sql
--hide-input
CREATE TABLE Movies (id INTEGER PRIMARY KEY, name TEXT, year INTEGER);
INSERT INTO Movies (name, year) VALUES ("Snow White", 1937);
INSERT INTO Movies (name, year) VALUES ("Fantasia", 1940);
```

To list the content of the database, we need to use `SELECT` in SQL query. We
can use extra option `--caption='Table: Movies'` to add caption to output:

```sql
--hide-input --caption='Table: Movies'
SELECT * FROM Movies;
```

SQL results are formatted using [tabulate](https://pypi.org/project/tabulate/).
Using option `--table-format` we can change how the end results looks like.
By default, `psgl` is used and there rest options can be found from tabulate's
documentation. The total number of rows in database is:

```sql
--caption='With psql formatting'
SELECT COUNT(*) AS 'Number of movies in database' FROM Movies;
```

Option `--hide-headers` can be used to hide the header row of the result.

```sql
--table-format='github' --hide-headers --caption='With github formatting and headers removed'
SELECT COUNT(*) AS 'Now shown' FROM Movies;
```

Processing the file with markdown-sql-eval:

markdown-sql-eval examples/example2.md > examples/example2_rendered.md

Result is:

# Sample file

Hello, this is a sample file. Below, we initialize some test data to sqlite
database. It doesn't show in the final output, because of `--hide-input` flag.

To list the content of the database, we need to use `SELECT` in SQL query. We
can use extra option `--caption='Table: Movies'` to add caption to output:

```text
Table: Movies

+------+------------+--------+
|   id | name       |   year |
|------+------------+--------|
|    1 | Snow White |   1937 |
|    2 | Fantasia   |   1940 |
+------+------------+--------+
```

SQL results are formatted using [tabulate](https://pypi.org/project/tabulate/).
Using option `--table-format` we can change how the end results looks like.
By default, `psgl` is used and there rest options can be found from tabulate's
documentation. The total number of rows in database is:

```sql
SELECT COUNT(*) AS 'Number of movies in database' FROM Movies;
```

```text
With psql formatting

+--------------------------------+
|   Number of movies in database |
|--------------------------------|
|                              2 |
+--------------------------------+
```

Option `--hide-headers` can be used to hide the header row of the result.

```sql
SELECT COUNT(*) AS 'Now shown' FROM Movies;
```

```text
With github formatting and headers removed

|---|
| 2 |
```

The generated markdown file can then be added to your project documentation and hosted using e.g. mkdocs. For that idea, take a look of docs/demo.md, which is hosted in here, and generated from docs/demo_tmpl.md.

Contributing

Contributions are welcome as usual. If you have any good idea, and especially, a better name for a package, raise an issue.

About

enkeksi takes a markdown-formatted input and executes the sql queries found in it, and returns a markdown-formatted output where the results of the sql queries have been added.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages