{ "info": { "author": "Julius Seporaitis", "author_email": "julius@seporaitis.net", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5" ], "description": "==========\nmysqlparse\n==========\n\n.. image:: https://img.shields.io/pypi/v/mysqlparse.svg\n :target: https://pypi.python.org/pypi/mysqlparse\n\n.. image:: https://img.shields.io/travis/seporaitis/mysqlparse/master.svg\n :target: https://travis-ci.org/seporaitis/mysqlparse\n\n\nA highly experimental attempt to have a sane parser library to parse MySQL statements.\n\nAt the moment - use it at your own risk!\n\n\nFeatures\n--------\n\n* Parses SOME SQL strings.\n\n\nExample\n-------\n\nSome properties that can be accessed.\n\n.. code-block:: python\n\n >>> import mysqlparse\n >>> sql = mysqlparse.parse(\"\"\"\n ... ALTER TABLE `django_user` ADD COLUMN `notes` LONGTEXT NOT NULL\n ... \"\"\")\n >>> print(sql.statements[0].statement_type)\n ALTER\n >>> print(sql.statements[0].table_name)\n `django_user`\n >>> print(sql.statements[0].ignore)\n False\n >>> print(sql.statements[0].alter_specification[0].alter_action)\n ADD COLUMN\n >>> print(sql.statements[0].alter_specification[0].column_name)\n `notes`\n >>> print(sql.statements[0].alter_specification[0].data_type)\n LONGTEXT\n >>> print(sql.statements[0].alter_specification[0].null)\n False\n >>> print(sql.statements[0].alter_specification[0].column_position)\n LAST\n\nChecking that the alter statement is backwards compatible with a\nprevious version of SOME code, which does not know how to save\n``notes`` as ``NOT NULL``:\n\n.. code-block:: python\n\n for statement in sql.statements:\n if statement != 'ALTER':\n continue\n for column in statement.alter_specification:\n if column.data_type == 'LONGTEXT':\n if column.null is False and column.default != 'NULL':\n print \"{s.table_name}.{c.column_name} is `LONGTEXT NOT NULL` which may break the production system. Use `LONGTEXT DEFAULT NULL` instead.\".format(\n s=statement,\n c=column,\n )\n\n\nHow can you help?\n-----------------\n\nA short list of things that would help (from relatively easiest):\n\n* Raise an issue with an edge case statement that **should** parse,\n but doesn't.\n\n* Raise an issue with how you would like to use this library.\n\n* Document the available properties in the parsed object.\n\n* Add a missing test case or suggest a way to avoid so much repetition\n in tests checking the same statement, but with variations.\n\n* Suggest how to use ``pyparsing`` to do statement validation.\n\n* Maybe it is possible to generate ``pyparsing`` parser from the MySQL\n source code?\n\n* Add ability to unparse the parse (sub)trees back into valid SQL.\n\n\nWhy?\n----\n\nOut of frustration for lack of a better tool.\n\n\n\n\nHistory\n-------\n\nPENDING\n-------\n\n* (Insert new release notes below this line)\n\n0.1.6 (2017-06-16)\n------------------\n\n* Add support for ``ALTER TABLE .. CHANGE COLUMN`` statements (contributed by [@jgysland](https://github.com/jgysland))\n\n0.1.5 (2016-08-23)\n------------------\n\n* Change the licence from ``AGPLv3`` to ``MIT`` licence.\n\n\n0.1.4 (2016-02-28)\n------------------\n\n* Brought back ``HISTORY.rst``.\n* Add ``mysqlparse.parse`` function.\n* Add ``six`` as a dependency to make writing Py2 and Py3 compatible code easier.\n* Add support for ``ALTER TABLE .. MODIFY [COLUMN]`` statements.\n* Add support for ``ALTER TABLE .. DROP *`` statements.\n* Move version string from ``setup.py`` into ``mysqlparse``.\n\n\n0.1.3 (2016-02-20)\n------------------\n\n* Updated ``README.rst``.\n* Add support for ``ALTER TABLE ... ADD INDEX`` statements.\n\n\n0.1.2 (2016-02-16)\n------------------\n\n* A little tidy up.\n* Removed ``defaultValue`` parse action.\n* Improved ``NULL`` handling.\n* Updated tests to pass.\n\n\n0.1.1 (2016-02-15)\n------------------\n\n* Fixed packaging configuration.\n\n\n0.1.0 (2016-02-15)\n------------------\n\n* First release with code parsing some of ``ALTER TABLE ... ADD COLUMN`` statements.\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/seporaitis/mysqlparse", "keywords": "sql parse pyparsing mysql database", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "mysqlparse", "package_url": "https://pypi.org/project/mysqlparse/", "platform": "", "project_url": "https://pypi.org/project/mysqlparse/", "project_urls": { "Homepage": "https://github.com/seporaitis/mysqlparse" }, "release_url": "https://pypi.org/project/mysqlparse/0.1.6/", "requires_dist": null, "requires_python": "", "summary": "A library for parsing SQL statements.", "version": "0.1.6" }, "last_serial": 2954561, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "526e7b777579f0dc6577cea8153c60c2", "sha256": "648061fde3227d0e0770063783daf11ff30a81147170e3183b91f39ea09b57b0" }, "downloads": -1, "filename": "mysqlparse-0.1.0.tar.gz", "has_sig": false, "md5_digest": "526e7b777579f0dc6577cea8153c60c2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18023, "upload_time": "2016-02-15T16:02:28", "url": "https://files.pythonhosted.org/packages/84/21/52d65f77cc1b9a1de93dba845060a4b8d53f98082685b6e52e537fe7f338/mysqlparse-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "996af93f2635412585784e1aa285417e", "sha256": "7897183eabf11f7efc30cde8a1d4c36f8046c993bd407da5152e234560dbb2ae" }, "downloads": -1, "filename": "mysqlparse-0.1.1.tar.gz", "has_sig": false, "md5_digest": "996af93f2635412585784e1aa285417e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20752, "upload_time": "2016-02-15T16:40:31", "url": "https://files.pythonhosted.org/packages/34/fe/5dbdcf83a73efc8c4fe1499c0c344c4e56f0c1aa1e1741992290a5e416d1/mysqlparse-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "ae446aa5f33094939a1199d9840f5223", "sha256": "ee31ba83b5aae6c844940e5df6dff8cfe7419f476e3f916f373d7e993d572bf4" }, "downloads": -1, "filename": "mysqlparse-0.1.2.tar.gz", "has_sig": false, "md5_digest": "ae446aa5f33094939a1199d9840f5223", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20651, "upload_time": "2016-02-16T11:27:43", "url": "https://files.pythonhosted.org/packages/83/e5/5bca3cfd96b2142fc62b63a23a976e3efa9133f9920a688fe7070690f46f/mysqlparse-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "206af33382a7f179cd4ff519220f9d21", "sha256": "ed4a7d37413344a14b72ac87f967b0333bea119d6f3742fe6bf4f752a91f82f5" }, "downloads": -1, "filename": "mysqlparse-0.1.3.tar.gz", "has_sig": false, "md5_digest": "206af33382a7f179cd4ff519220f9d21", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21825, "upload_time": "2016-02-20T17:29:45", "url": "https://files.pythonhosted.org/packages/98/67/2c172a399d1f1a4b92b7827bb93675ed573c71bec1b8add7a56709b40527/mysqlparse-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "bc835786832fa3186a2c3f88828e0ff8", "sha256": "ad213e85f11f1169a2c6a3a3343094f10183d5612bd92630930d6fc2a444f5f2" }, "downloads": -1, "filename": "mysqlparse-0.1.4.tar.gz", "has_sig": false, "md5_digest": "bc835786832fa3186a2c3f88828e0ff8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24048, "upload_time": "2016-02-28T15:42:09", "url": "https://files.pythonhosted.org/packages/fe/0a/06a91fc58aaf098115c4c863284470762abfe4e11f505b9194dfb872d447/mysqlparse-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "357efd67240c7c1292c4366a27a20910", "sha256": "086069ebbaeea1ce0b4a0faf85df252dc711a32179d96b8f9beb24cef37a0f29" }, "downloads": -1, "filename": "mysqlparse-0.1.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "357efd67240c7c1292c4366a27a20910", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 11624, "upload_time": "2016-10-13T14:05:43", "url": "https://files.pythonhosted.org/packages/42/5b/4d12d7f78971ae51c51fce8d58c79ff7ca6e58e90f72721d7bf1f838149c/mysqlparse-0.1.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0ca096172326fe72026a486779b25e15", "sha256": "a0f6139f9871279efc832de820629378059a37f0e48a290001e7e5fe71f783ae" }, "downloads": -1, "filename": "mysqlparse-0.1.5.tar.gz", "has_sig": false, "md5_digest": "0ca096172326fe72026a486779b25e15", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12868, "upload_time": "2016-08-23T09:56:22", "url": "https://files.pythonhosted.org/packages/b2/e0/993783483ed7c5356830f420f8853ddb374da727d8936ce88db2068f09bd/mysqlparse-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "473a255604e83c64801146396a6e5bb2", "sha256": "69d95f41624aa06303e464769f31a173d936c925554b44e2025afec0b676bfaa" }, "downloads": -1, "filename": "mysqlparse-0.1.6.tar.gz", "has_sig": false, "md5_digest": "473a255604e83c64801146396a6e5bb2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12188, "upload_time": "2017-06-16T14:08:48", "url": "https://files.pythonhosted.org/packages/51/bd/caa4a328194927767c8f04662f56405927255a8f8681b4633b1d4cd1a533/mysqlparse-0.1.6.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "473a255604e83c64801146396a6e5bb2", "sha256": "69d95f41624aa06303e464769f31a173d936c925554b44e2025afec0b676bfaa" }, "downloads": -1, "filename": "mysqlparse-0.1.6.tar.gz", "has_sig": false, "md5_digest": "473a255604e83c64801146396a6e5bb2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12188, "upload_time": "2017-06-16T14:08:48", "url": "https://files.pythonhosted.org/packages/51/bd/caa4a328194927767c8f04662f56405927255a8f8681b4633b1d4cd1a533/mysqlparse-0.1.6.tar.gz" } ] }