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 sqlitisTurning 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)))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 blackThe 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 blackThere are three types of tests:
- Unit tests of the internal model classes
- Unit tests of the core
to_sqlafunction - 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
-
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 barSELECT * FROM foo INNER JOIN bar
-
Cross Joins
SELECT * FROM foo, barSELECT * 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