Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/seporaitis/mysqlparse
Python library for parsing SQL statements
https://github.com/seporaitis/mysqlparse
library mysql parser python python2 python3
Last synced: 18 days ago
JSON representation
Python library for parsing SQL statements
- Host: GitHub
- URL: https://github.com/seporaitis/mysqlparse
- Owner: seporaitis
- License: mit
- Created: 2016-02-12T15:10:47.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2022-12-26T19:44:44.000Z (almost 2 years ago)
- Last Synced: 2024-10-13T09:41:26.559Z (27 days ago)
- Topics: library, mysql, parser, python, python2, python3
- Language: Python
- Homepage:
- Size: 87.9 KB
- Stars: 22
- Watchers: 5
- Forks: 13
- Open Issues: 10
-
Metadata Files:
- Readme: README.rst
- Changelog: HISTORY.rst
- Contributing: CONTRIBUTING.rst
- License: LICENSE
Awesome Lists containing this project
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.. image:: https://readthedocs.org/projects/mysqlparse/badge/?version=latest
:target: http://mysqlparse.readthedocs.io/en/latest/?badge=latestA 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)
LASTChecking 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.