Git Product home page Git Product logo

sqlitis's Introduction

https://travis-ci.org/pglass/sqlitis.svg?branch=master

sqlitis

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

This 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

This repository includes a data-driven test suite as well as style checks (with flake8) and automatic code formatting (with yapf).

Use tox to run the tests.

$ pip install tox
### Run everything
$ tox
### Run just the unit/functional tests
$ tox -e py27
### Run just style/formatting checks
$ tox -e flake8

yapf is used to automatically fix code style/formatting errors. It will reformat your code in place.

### Auto-fix style/formatting checks
$ tox -e yapf

There are three types of tests:

  • Unit tests of the internal models
  • Unit tests of the core to_sqla function
  • Functional tests that execute the generated SQLAlchemy expressions, against a sqlite database.

Most of these tests are generated from data in tests/data.json.

SQL Support Checklist

  • [ ] Select
    • [x] Star: SELECT * FROM foo
    • [x] Multiple columns: SELECT a, b, c FROM foo
    • [x] Qualified column names: SELECT foo.a, foo.b FROM foo
    • [x] Column aliases: SELECT foo.id AS foo_id, foo.name AS foo_name from FOO
    • [ ] Joins
      • [x] Plain Join: SELECT foo.a, bar.b FROM foo JOIN bar
      • [x] Inner Join: SELECT foo.a, bar.b FROM foo INNER JOIN bar
      • [ ] Left/Right Joins
      • [ ] Outer Joins
    • [x] On Clauses: SELECT foo.a, bar.b FROM foo JOIN bar ON foo.id = bar.foo_id
    • [x] Conjuctions (AND/OR): SELECT foo.a, bar.b FROM foo join bar ON foo.id = bar.foo_id AND foo.val > 1
    • [x] Select from subquery: SELECT id FROM (SELECT * FROM foo)
    • [x] Where: SELECT id FROM foo WHERE id = 123
    • [x] Between: SELECT a FROM foo WHERE foo.val BETWEEN 1 AND 20
    • [x] 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

sqlitis's People

Contributors

pglass avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.