Skip to main content

convert sql to sqlalchemy expressions

Project description

Build Status PyPI PyPI - Python Version

Overview

Sqlitis is a tool to convert plain SQL queries to SQLAlchemy expressions. It is usable from the command line or as a library.

Sqlitis converts to the SQLAlchemy expression language. It does not support the SQLAlchemy ORM.

$ pip install sqlitis

Examples

Turning a select query into a sqlachemy expression:

$ sqlitis 'select foo.name, bar.value from foo join bar'
select([foo.c.name, bar.c.value]).select_from(foo.join(bar))

Converting a join:

$ sqlitis 'foo join bar on foo.id = bar.foo_id and (foo.val < 100 or bar.val < 100)'
foo.join(bar, and_(foo.c.id == bar.c.foo_id, or_(foo.c.val < 100, bar.c.val < 100)))

Running tests

Use tox to run the tests.

$ pip install tox

### Run everything
$ tox

### Run the unit/functional tests
$ tox -e py36

### Run style checks
$ tox -e flake8 black

The code is formatted using black.

### Reformat the code with black
$ make format

### Check if black needs to be run. This does not reformat.
$ tox -e black

There are three types of tests:

  • Unit tests of the internal model classes
  • Unit tests of the core to_sqla function
  • Functional tests that execute the generated SQLAlchemy expressions against a sqlite database
  • Functional tests of the CLI

These tests are parameterized (data driven) using data from test/*.yaml

SQL Support Checklist

  • Select

    • Star: SELECT * FROM foo

    • Multiple columns: SELECT a, b, c FROM foo

    • Qualified column names: SELECT foo.a, foo.b FROM foo

    • Column aliases: SELECT foo.id AS foo_id, foo.name AS foo_name from FOO

    • Joins

      • Inner Join:

        • SELECT * FROM foo JOIN bar
        • SELECT * FROM foo INNER JOIN bar
      • Cross Joins

        • SELECT * FROM foo, bar
        • SELECT * FROM foo CROSS JOIN bar
      • Left/Right Joins

      • Outer Joins

    • On Clauses: SELECT foo.a, bar.b FROM foo JOIN bar ON foo.id = bar.foo_id

    • Conjuctions (AND/OR): SELECT foo.a, bar.b FROM foo join bar ON foo.id = bar.foo_id AND foo.val > 1

    • Select from subquery: SELECT id FROM (SELECT * FROM foo)

    • Where: SELECT id FROM foo WHERE id = 123

    • Between: SELECT a FROM foo WHERE foo.val BETWEEN 1 AND 20

    • Select distinct: SELECT DISTINCT a FROM foo

    • Aggregate functions (SUM, AVG, COUNT, MIN, MAX): SELECT COUNT(*) FROM foo

    • Group by: SELECT COUNT(*) FROM foo GROUP BY column

    • Like

    • Limit/offset

    • Order by

  • Insert

  • Update

  • Delete

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sqlitis-0.0.5.tar.gz (9.7 kB view details)

Uploaded Source

File details

Details for the file sqlitis-0.0.5.tar.gz.

File metadata

  • Download URL: sqlitis-0.0.5.tar.gz
  • Upload date:
  • Size: 9.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.1.0 requests-toolbelt/0.9.1 tqdm/4.42.0 CPython/3.6.3

File hashes

Hashes for sqlitis-0.0.5.tar.gz
Algorithm Hash digest
SHA256 4fcd04a027c9670a8bbbbd66b4d5d3db1baaa4f1b40fa96c4de90309113cfaf0
MD5 077fc902251ad3ce6338552ba7f684a8
BLAKE2b-256 26c2b78e97be6702abd148c05fc61b329f82a07aa34f24cd1b57f7a268626c37

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page