Skip to main content

Parses PostgreSQL/MySQL and translates ADQL to PostgreSQL/MySQL.

Project description

Tool for parsing and processing MySQL and ADQL SELECT queries

Designed to be used in conjunction with django-daiquri as a query processing backend but it can be easily used as a stand-alone tool or integrated into another project.

Build Status Coverage Status Latest Version http://img.shields.io/badge/license-APACHE-blue.svg?style=flat

Installation

The easiest way to install the package is by using the pip tool:

pip install queryparser-python3

or if you are using an older version (2.7) of python

pip install queryparser-python2

Alternatively, you can clone the repository and install it from there. However, this step also requires generating the parser which is a slighly more elaborate process (see below).

Generating the parser from the git repository

To generate the parsers you need python (either 2 or 3), java above version 7, and antlr4 (antlr-4.*-complete.jar has to be installed inside the /usr/local/lib/ or /usr/local/bin/ directories).

After cloning the project run

make

and a lib directory will be created with the complete source for python2 and python3. After that run

python setup.py install

to install the generated parser in your virtual environment.

Parsing MySQL

Parsing and processing of MySQL queries can be done by creating an instance of the MySQLQueryProcessor class

from queryparser.mysql import MySQLQueryProcessor

qp = MySQLQueryProcessor()

feeding it a MySQL query

sql = "SELECT a FROM db.tab;"
qp.set_query(sql)

and running it with

qp.process_query()

After the processing, the processor object qp will include tables, columns, functions, and keywords used in the query or will raise a QuerySyntaxError if there are any syntax errors in the query.

Alternatively, passing the query at initialization automatically processes it.

Translating ADQL

Translation of ADQL queries is done similarly by first creating an instance of the ADQLQueryTranslator class

from queryparser.adql import ADQLQueryTranslator

adql = "SELECT TOP 100 POINT('ICRS', ra, de) FROM db.tab;"
adt = ADQLQueryTranslator(adql)

and calling

adt.to_mysql()

which returns a translated string representing a valid MySQL query if the ADQL query had no errors. The MySQL query can then be parsed with the MySQLQueryProcessor in the same way as shown above.

Testing

First, install pytest

pip install pytest

then run the test suite for a version of python you would like to test with

pytest lib/python2
pytest lib/python3

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

queryparser-python3-0.4.6.tar.gz (291.9 kB view details)

Uploaded Source

File details

Details for the file queryparser-python3-0.4.6.tar.gz.

File metadata

  • Download URL: queryparser-python3-0.4.6.tar.gz
  • Upload date:
  • Size: 291.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3.post20200330 requests-toolbelt/0.9.1 tqdm/4.44.1 CPython/3.6.10

File hashes

Hashes for queryparser-python3-0.4.6.tar.gz
Algorithm Hash digest
SHA256 057d8b58604189d1b65a9577160cfc793032a80709c949fde33f4f5aecc61c9c
MD5 ee66c2b13f7be83b01194478c9faef8b
BLAKE2b-256 7ce5c2af8d2411c5205ecd7b7239bf54f00ca682c7cb8d1b0e3a1d616962e0d5

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