{ "info": { "author": "Maciej Brencz", "author_email": "maciej.brencz@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Database" ], "description": "# sql-metadata\n\n[![PyPI](https://img.shields.io/pypi/v/sql_metadata.svg)](https://pypi.python.org/pypi/sql_metadata)\n[![Build Status](https://travis-ci.org/macbre/sql-metadata.svg?branch=master)](https://travis-ci.org/macbre/sql-metadata)\n\nUses tokenized query returned by [`python-sqlparse`](https://github.com/andialbrecht/sqlparse) and generates query metadata.\nExtracts column names and tables used by the query. Provides a helper for normalization of SQL queries.\n\nSupported queries syntax:\n\n* MySQL\n* PostgreSQL\n* [Apache Hive](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML)\n\n### Usage\n\n```\npip install sql_metadata\n```\n\n```python\n>>> import sql_metadata\n\n>>> sql_metadata.get_query_tokens(\"SELECT * FROM foo\")\n[, , , ]\n\n>>> sql_metadata.get_query_columns(\"SELECT test, id FROM foo, bar\")\n[u'test', u'id']\n\n>>> sql_metadata.get_query_tables(\"SELECT a.* FROM product_a.users AS a JOIN product_b.users AS b ON a.ip_address = b.ip_address\")\n['product_a.users', 'product_b.users']\n\n>>> sql_metadata.get_query_columns(\"INSERT /* VoteHelper::addVote xxx */ INTO `page_vote` (article_id,user_id,`time`) VALUES ('442001','27574631','20180228130846')\")\n['article_id', 'user_id', 'time']\n\n>>> sql_metadata.get_query_columns(\"SELECT a.* FROM product_a.users AS a JOIN product_b.users AS b ON a.ip_address = b.ip_address\")\n['a.*', 'a.ip_address', 'b.ip_address']\n\n>>> sql_metadata.get_query_tables(\"SELECT test, id FROM foo, bar\")\n[u'foo', u'bar']\n\n>>> sql_metadata.get_query_limit_and_offset('SELECT foo_limit FROM bar_offset LIMIT 50 OFFSET 1000')\n(50, 1000)\n\n>>> sql_metadata.get_query_limit_and_offset('SELECT foo_limit FROM bar_offset limit 2000,50')\n(50, 2000)\n```\n\n> See `test/test_query.py` file for more examples of a bit more complex queries.\n\n#### Queries normalization\n\n```python\n>>> from sql_metadata import generalize_sql\n>>> generalize_sql('SELECT /* Test */ foo FROM bar WHERE id in (1, 2, 56)')\n'SELECT foo FROM bar WHERE id in (XYZ)'\n```\n\n> See `test/test_normalization.py` file for more examples of a bit more complex queries.", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/macbre/sql-metadata", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "sql_metadata", "package_url": "https://pypi.org/project/sql_metadata/", "platform": "", "project_url": "https://pypi.org/project/sql_metadata/", "project_urls": { "Homepage": "https://github.com/macbre/sql-metadata" }, "release_url": "https://pypi.org/project/sql_metadata/1.5.0/", "requires_dist": null, "requires_python": "", "summary": "Uses tokenized query returned by python-sqlparse and generates query metadata", "version": "1.5.0" }, "last_serial": 4577373, "releases": { "1.0": [ { "comment_text": "", "digests": { "md5": "b9570fac790541731f283a0e4a7d7775", "sha256": "f1517cdc66e14431f5f53fa57c81e8be0d66dbacd03dc06f8754e401a5ee123b" }, "downloads": -1, "filename": "sql_metadata-1.0.tar.gz", "has_sig": false, "md5_digest": "b9570fac790541731f283a0e4a7d7775", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3753, "upload_time": "2018-01-11T17:58:27", "url": "https://files.pythonhosted.org/packages/38/f5/c4fec0c1c8080f0e295749bcca1083c759bc27f2b05b7ffc04f857c6d51e/sql_metadata-1.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "37d768884764ee0afbbff7835c388727", "sha256": "55871e75c1201817634ddb77b34276cbc00a3eccd984f656ed291636a12ea73f" }, "downloads": -1, "filename": "sql_metadata-1.0.1.tar.gz", "has_sig": false, "md5_digest": "37d768884764ee0afbbff7835c388727", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3993, "upload_time": "2018-01-11T22:00:10", "url": "https://files.pythonhosted.org/packages/32/60/210df8d875a6a18effd74bb7f6e40f5785b125997226eb66f0128ab92c86/sql_metadata-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "2bdaf1955b769a909358564970c23869", "sha256": "6aff4bd2c8630596248c7c0bc8c08fbf8e32158e068f85fea9d0c65dc659e599" }, "downloads": -1, "filename": "sql_metadata-1.0.2.tar.gz", "has_sig": false, "md5_digest": "2bdaf1955b769a909358564970c23869", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4749, "upload_time": "2018-01-12T22:01:28", "url": "https://files.pythonhosted.org/packages/5f/dd/0f7e589bbe0bb8e2845696f089b6e08ca857ab1188a0f4e665a916487032/sql_metadata-1.0.2.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "49781a4f6690702236e027e60e99239d", "sha256": "fd4c788cef30688dfd60e591a6febb1fb5c2e81cf53c542f4900a0e84ad56ad0" }, "downloads": -1, "filename": "sql_metadata-1.1.0.tar.gz", "has_sig": false, "md5_digest": "49781a4f6690702236e027e60e99239d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5174, "upload_time": "2018-02-14T21:47:55", "url": "https://files.pythonhosted.org/packages/70/75/1bc2cba9c39f4a82037b3755f490fc2fa0bb7fe01472424e221d5583eccb/sql_metadata-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "ff7f8bab2b2a5abc1095cb4d48da90e7", "sha256": "94dda9e7d886f51963a4d27e5ab91d09bb553af243cc51a4a3c264c97b3b75cd" }, "downloads": -1, "filename": "sql_metadata-1.1.1.tar.gz", "has_sig": false, "md5_digest": "ff7f8bab2b2a5abc1095cb4d48da90e7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5331, "upload_time": "2018-02-16T17:39:34", "url": "https://files.pythonhosted.org/packages/ee/84/e1c8f01f4fe988b4aaf16adffdb6a675cd61dff6e256c90a339f9e1d03da/sql_metadata-1.1.1.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "fbf0616b3f9121afcc540bdc82c52793", "sha256": "7e192aea037d1d80b5cda637b81c66762c88cb707597894de3bcc786f9c0721d" }, "downloads": -1, "filename": "sql_metadata-1.1.2.tar.gz", "has_sig": false, "md5_digest": "fbf0616b3f9121afcc540bdc82c52793", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5366, "upload_time": "2018-02-16T18:21:15", "url": "https://files.pythonhosted.org/packages/62/43/549d0b3cedddd7e160672d1002d26cbc6e301451408da42eb399e7d4f845/sql_metadata-1.1.2.tar.gz" } ], "1.2": [ { "comment_text": "", "digests": { "md5": "f081a91597eb7fd9862374059c2c5193", "sha256": "fbe51eb6ba05dc32853b99d9c347d1d84ea7413d05938dee5a8b5d1c17cee5d6" }, "downloads": -1, "filename": "sql_metadata-1.2.tar.gz", "has_sig": false, "md5_digest": "f081a91597eb7fd9862374059c2c5193", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3667, "upload_time": "2018-10-28T11:55:59", "url": "https://files.pythonhosted.org/packages/ce/f9/92c2797c2ddf58ccad1e4a9f39e298de23a70db572c8e94d9e97efbd39ae/sql_metadata-1.2.tar.gz" } ], "1.3": [ { "comment_text": "", "digests": { "md5": "05868d567c57f0aa9cde4df2fa3d1847", "sha256": "21f850f5c86fe15aad0d1aaf9dc81569c875954b62320857af4e3c2e1bcd2b27" }, "downloads": -1, "filename": "sql_metadata-1.3.tar.gz", "has_sig": false, "md5_digest": "05868d567c57f0aa9cde4df2fa3d1847", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4990, "upload_time": "2018-11-17T17:12:32", "url": "https://files.pythonhosted.org/packages/e6/18/148dbaf9898f03077e9f47a136d6a1d29274f24edf0e1771edaf8b0ee648/sql_metadata-1.3.tar.gz" } ], "1.4": [ { "comment_text": "", "digests": { "md5": "8e98fb660aaa036b0f80cb314fa3fab9", "sha256": "7a33f203395081b949b5c5b52a0b1a956c90a3b9d42eb03bf688cedb4d6767f2" }, "downloads": -1, "filename": "sql_metadata-1.4.tar.gz", "has_sig": false, "md5_digest": "8e98fb660aaa036b0f80cb314fa3fab9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5199, "upload_time": "2018-12-08T13:53:16", "url": "https://files.pythonhosted.org/packages/2a/11/18c9767b3bb73e0f7968c6067554d79663ef5f657aeaf4a655bb0ef1b8aa/sql_metadata-1.4.tar.gz" } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "47f8f5b89c7b5292806fce830a6ca508", "sha256": "bbf9025373569f0998fec8783de6ff8a454efc19dfa23f9162ee6c7b38dbf99d" }, "downloads": -1, "filename": "sql_metadata-1.5.0.tar.gz", "has_sig": false, "md5_digest": "47f8f5b89c7b5292806fce830a6ca508", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5231, "upload_time": "2018-12-09T13:48:39", "url": "https://files.pythonhosted.org/packages/36/ac/178e711a0ae64fbd9471ff77e615597fc344fdf2a15237a66621d01b01dd/sql_metadata-1.5.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "47f8f5b89c7b5292806fce830a6ca508", "sha256": "bbf9025373569f0998fec8783de6ff8a454efc19dfa23f9162ee6c7b38dbf99d" }, "downloads": -1, "filename": "sql_metadata-1.5.0.tar.gz", "has_sig": false, "md5_digest": "47f8f5b89c7b5292806fce830a6ca508", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5231, "upload_time": "2018-12-09T13:48:39", "url": "https://files.pythonhosted.org/packages/36/ac/178e711a0ae64fbd9471ff77e615597fc344fdf2a15237a66621d01b01dd/sql_metadata-1.5.0.tar.gz" } ] }