Socket
Socket
Sign inDemoInstall

mysqlparse

Package Overview
Dependencies
0
Maintainers
1
Alerts
File Explorer

Install Socket

Detect and block malicious and high-risk dependencies

Install

    mysqlparse

A library for parsing SQL statements.


Maintainers
1

Readme

========== mysqlparse

.. image:: https://img.shields.io/pypi/v/mysqlparse.svg :target: https://pypi.python.org/pypi/mysqlparse

.. image:: https://img.shields.io/travis/seporaitis/mysqlparse/master.svg :target: https://travis-ci.org/seporaitis/mysqlparse

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.

.. code-block:: python

>>> 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:

.. code-block:: python

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

PENDING

  • (Insert new release notes below this line)

0.1.6 (2017-06-16)

  • Add support for ALTER TABLE .. CHANGE COLUMN statements (contributed by @jgysland)

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.

Keywords

FAQs


Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc