{ "info": { "author": "Sean Harrison", "author_email": "sah@blackearth.us", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)", "Programming Language :: Python :: 3" ], "description": "# sqly\n\nSQL is a fantastic language \u2014 one of the most successful programming languages in the world. We should use it, not try to replace it with a bespoke DSL. \n\nYet there are a couple of things that are nice to have help with in constructing SQL queries:\n\n* **dialect-aware safe value substitution**: Every database interface has its own syntax for substituting values safely (not to allow SQL injection) \u2014 for example, `$1` or `?` or `:varname`. They also have different requirements for the format of the sql + values argument lists. I want to able to write my queries with the same value substituion syntax, regardless of which database interface I am using, and know that the SQL will be output correctly for my interface, and that the values will be passed to the database engine safely. \n* **dynamic attributes**: In many applications, I don't know in advance which attributes I am going to select, insert, update, or filter by. I want to SELECT a given list of attributes, or filter WHERE a given key/value mapping, or UPDATE or INSERT particular attributes, without having to rewrite the SQL query.\n* **block composition**: Some SQL queries are very complex. I want to able to compose blocks of SQL into larger queries, so that I can manage this complexity effectively. (Most database query DSLs are unable to deal with complex queries, or they invent a hard-to-learn language for writing those queries. Learning SQL is a better use of our time, but it would be very helpful having some assistance managing/manipulating the different blocks in a query.)\n\nsqly:\n\n* One class, `SQL`, with one field, `query`, and one method, `.render`, which takes one optional argument, `dialect`. \n* Dynamic value replacement, rendered in one of the supported dialects: postgres (`$1`), sqlalchemy (`:varname`), embedded (`:varname`), mysql (`%(varname)s`), sqlite (`?`). Default style is embedded / `:varname`.\n* Dynamic attribute/value lists in `SELECT`, `WHERE`, `INSERT`, and `UPDATE` syntax\n* Block composition\n\n\n\n", "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/BlackEarth/sqly", "keywords": "", "license": "MPL 2.0", "maintainer": "", "maintainer_email": "", "name": "sqly", "package_url": "https://pypi.org/project/sqly/", "platform": "", "project_url": "https://pypi.org/project/sqly/", "project_urls": { "Homepage": "https://github.com/BlackEarth/sqly" }, "release_url": "https://pypi.org/project/sqly/0.4.1/", "requires_dist": [ "PyYAML (==5.1.2)" ], "requires_python": "", "summary": "Write SQL in SQL", "version": "0.4.1" }, "last_serial": 5904960, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "27373b991621d11813353c4063fd2a2b", "sha256": "44c7d10f0b2d8e81656c86250f5815046549fcaec7946cc105ce7268693e2091" }, "downloads": -1, "filename": "sqly-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "27373b991621d11813353c4063fd2a2b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9210, "upload_time": "2019-08-09T05:52:02", "url": "https://files.pythonhosted.org/packages/55/7e/8e767d08efae0247d92f1db89f4233cc7cd03b64c89dea8eb989d258f469/sqly-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1441888f3ef134c7f1fbf24570717082", "sha256": "136102ec8ea348ff014f807581fd94829dbf5993c8b490e0a736fc4143492d74" }, "downloads": -1, "filename": "sqly-0.1.0.tar.gz", "has_sig": false, "md5_digest": "1441888f3ef134c7f1fbf24570717082", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3483, "upload_time": "2019-08-09T05:52:04", "url": "https://files.pythonhosted.org/packages/e6/3d/c01ef409888a5a88747a1a6ac64cd3c3b3c1d9d03911761e64846e178f4c/sqly-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "cdaae285d4b4cc2161e8834833032285", "sha256": "8178b4ef5c948c98e0359d0fb098b38a09187626da2d242237349d707cf3dbf9" }, "downloads": -1, "filename": "sqly-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "cdaae285d4b4cc2161e8834833032285", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9196, "upload_time": "2019-08-09T05:59:44", "url": "https://files.pythonhosted.org/packages/fc/e6/e31796a00f2ea5ecc922ab4ae8fae0753bc4aa1b4b82b85fed6fbe3bb191/sqly-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "50860828926fabef9b201e024ccac007", "sha256": "b56e135839a7dc729958972a373097caee18e3846fe2f59f185b4a806a877b83" }, "downloads": -1, "filename": "sqly-0.1.1.tar.gz", "has_sig": false, "md5_digest": "50860828926fabef9b201e024ccac007", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3484, "upload_time": "2019-08-09T05:59:45", "url": "https://files.pythonhosted.org/packages/69/b9/54f05d39d803cc531ba846f976c32f7ce0ea170db8e6b1fb8e30a5f74257/sqly-0.1.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "f14066c5de443a0aa1ac354cd58a2349", "sha256": "2d69718b4ff446d8c7833f2fc89b76d82cbb269bc4846260906139932d0c643f" }, "downloads": -1, "filename": "sqly-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f14066c5de443a0aa1ac354cd58a2349", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15592, "upload_time": "2019-09-14T20:54:09", "url": "https://files.pythonhosted.org/packages/16/08/21d30f38e9169bdc31a3dd0eacb7cd6c2583ddb170332fdefab8aa9eccb2/sqly-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f1a9eef85c1887ac62418b7414eeeef1", "sha256": "2d6dda11ffbd3b9577e8246646813229e46ca9e8e948508f2b7d250c29d44a2a" }, "downloads": -1, "filename": "sqly-0.3.0.tar.gz", "has_sig": false, "md5_digest": "f1a9eef85c1887ac62418b7414eeeef1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9512, "upload_time": "2019-09-14T20:54:10", "url": "https://files.pythonhosted.org/packages/33/84/75472fd4843b5596848344acf7fa32e08304e57134ac693127aa0bb4d7e5/sqly-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "8d5593ee561384ebb9b3061c50a80fe8", "sha256": "a1db8b7093807da2d7a89dc6792bb36236b6540d9eabf747f7abd14d37c7ec2e" }, "downloads": -1, "filename": "sqly-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8d5593ee561384ebb9b3061c50a80fe8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15960, "upload_time": "2019-09-30T00:08:25", "url": "https://files.pythonhosted.org/packages/cd/0c/00cc39e7b918fc75a696009e26813714b5e0013352eced0a1660e0fa653d/sqly-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9d190344c9500807241e2e8a7ff136c7", "sha256": "96f722bd8989a3159143bad0e4df9a1bf5a322b64331eca55a0ba0820bb62807" }, "downloads": -1, "filename": "sqly-0.4.0.tar.gz", "has_sig": false, "md5_digest": "9d190344c9500807241e2e8a7ff136c7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9682, "upload_time": "2019-09-30T00:08:26", "url": "https://files.pythonhosted.org/packages/65/3c/943584c2e47851ff38081827fbaa7e3a5982688ef36e12ed483ebf0a19e5/sqly-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "5ee868aaf362869f3732decb9d5b2bcb", "sha256": "7195622df13800d4cb1e95e7d17047acb93eed96cff6021dfa01f580711101c2" }, "downloads": -1, "filename": "sqly-0.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5ee868aaf362869f3732decb9d5b2bcb", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15950, "upload_time": "2019-09-30T05:59:21", "url": "https://files.pythonhosted.org/packages/8d/b8/7d4b458525bbb9e922c0dd16fbed0b591995d7b9d484908bd1de85abd1b0/sqly-0.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b13f9f5700a598da2efc3e73fcdb38c3", "sha256": "2e6f84abd5e9c5b20df2ecc0d454dd573c8adbd9e25923883d3452afca4b10f5" }, "downloads": -1, "filename": "sqly-0.4.1.tar.gz", "has_sig": false, "md5_digest": "b13f9f5700a598da2efc3e73fcdb38c3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9675, "upload_time": "2019-09-30T05:59:25", "url": "https://files.pythonhosted.org/packages/09/b5/6f2ec894ad14e30a62ae8b64972504d29dad4e2bac47c3f2f3782510c282/sqly-0.4.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "5ee868aaf362869f3732decb9d5b2bcb", "sha256": "7195622df13800d4cb1e95e7d17047acb93eed96cff6021dfa01f580711101c2" }, "downloads": -1, "filename": "sqly-0.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5ee868aaf362869f3732decb9d5b2bcb", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15950, "upload_time": "2019-09-30T05:59:21", "url": "https://files.pythonhosted.org/packages/8d/b8/7d4b458525bbb9e922c0dd16fbed0b591995d7b9d484908bd1de85abd1b0/sqly-0.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b13f9f5700a598da2efc3e73fcdb38c3", "sha256": "2e6f84abd5e9c5b20df2ecc0d454dd573c8adbd9e25923883d3452afca4b10f5" }, "downloads": -1, "filename": "sqly-0.4.1.tar.gz", "has_sig": false, "md5_digest": "b13f9f5700a598da2efc3e73fcdb38c3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9675, "upload_time": "2019-09-30T05:59:25", "url": "https://files.pythonhosted.org/packages/09/b5/6f2ec894ad14e30a62ae8b64972504d29dad4e2bac47c3f2f3782510c282/sqly-0.4.1.tar.gz" } ] }