Skip to main content

A library for parsing SQL statements.

Project description

https://img.shields.io/pypi/v/mysqlparse.svg https://img.shields.io/travis/seporaitis/mysqlparse.svg

A highly experimental attempt to have a sane parser library to parse MySQL statements.

At the moment - use it at your own risk!

Features

  • Parses SOME SQL strings.

Example

Some properties that can be accessed.

>>> import mysqlparse
>>> sql = mysqlparse.parse("""
...     ALTER TABLE `django_user` ADD COLUMN `notes` LONGTEXT NOT NULL
... """)
>>> print(sql.statements[0].statement_type)
ALTER
>>> print(sql.statements[0].table_name)
`django_user`
>>> print(sql.statements[0].ignore)
False
>>> print(sql.statements[0].alter_specification[0].alter_action)
ADD COLUMN
>>> print(sql.statements[0].alter_specification[0].column_name)
`notes`
>>> print(sql.statements[0].alter_specification[0].data_type)
LONGTEXT
>>> print(sql.statements[0].alter_specification[0].null)
False
>>> print(sql.statements[0].alter_specification[0].column_position)
LAST

Checking that the alter statement is backwards compatible with a previous version of SOME code, which does not know how to save notes as NOT NULL:

for statement in sql.statements:
    if statement != 'ALTER':
        continue
    for column in statement.alter_specification:
        if column.data_type == 'LONGTEXT':
            if column.null is False and column.default != 'NULL':
                print "{s.table_name}.{c.column_name} is `LONGTEXT NOT NULL` which may break the production system. Use `LONGTEXT DEFAULT NULL` instead.".format(
                    s=statement,
                    c=column,
                )

How can you help?

A short list of things that would help (from relatively easiest):

  • Raise an issue with an edge case statement that should parse, but doesn’t.

  • Raise an issue with how you would like to use this library.

  • Document the available properties in the parsed object.

  • Add a missing test case or suggest a way to avoid so much repetition in tests checking the same statement, but with variations.

  • Suggest how to use pyparsing to do statement validation.

  • Maybe it is possible to generate pyparsing parser from the MySQL source code?

  • Add ability to unparse the parse (sub)trees back into valid SQL.

Why?

Out of frustration for lack of a better tool.

History

0.1.5 (2016-08-23)

  • Change the licence from AGPLv3 to MIT licence.

0.1.4 (2016-02-28)

  • Brought back HISTORY.rst.

  • Add mysqlparse.parse function.

  • Add six as a dependency to make writing Py2 and Py3 compatible code easier.

  • Add support for ALTER TABLE .. MODIFY [COLUMN] statements.

  • Add support for ALTER TABLE .. DROP * statements.

  • Move version string from setup.py into mysqlparse.

0.1.3 (2016-02-20)

  • Updated README.rst.

  • Add support for ALTER TABLE ... ADD INDEX statements.

0.1.2 (2016-02-16)

  • A little tidy up.

  • Removed defaultValue parse action.

  • Improved NULL handling.

  • Updated tests to pass.

0.1.1 (2016-02-15)

  • Fixed packaging configuration.

0.1.0 (2016-02-15)

  • First release with code parsing some of ALTER TABLE ... ADD COLUMN statements.

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

mysqlparse-0.1.5.tar.gz (12.9 kB view details)

Uploaded Source

Built Distribution

mysqlparse-0.1.5-py2.py3-none-any.whl (11.6 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file mysqlparse-0.1.5.tar.gz.

File metadata

  • Download URL: mysqlparse-0.1.5.tar.gz
  • Upload date:
  • Size: 12.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for mysqlparse-0.1.5.tar.gz
Algorithm Hash digest
SHA256 a0f6139f9871279efc832de820629378059a37f0e48a290001e7e5fe71f783ae
MD5 0ca096172326fe72026a486779b25e15
BLAKE2b-256 b2e0993783483ed7c5356830f420f8853ddb374da727d8936ce88db2068f09bd

See more details on using hashes here.

File details

Details for the file mysqlparse-0.1.5-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for mysqlparse-0.1.5-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 086069ebbaeea1ce0b4a0faf85df252dc711a32179d96b8f9beb24cef37a0f29
MD5 357efd67240c7c1292c4366a27a20910
BLAKE2b-256 425b4d12d7f78971ae51c51fce8d58c79ff7ca6e58e90f72721d7bf1f838149c

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