{ "info": { "author": "Tryton", "author_email": "python-sql@tryton.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Topic :: Database", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "python-sql\n==========\n\npython-sql is a library to write SQL queries in a pythonic way.\n\nNutshell\n--------\n\nImport::\n\n >>> from sql import *\n >>> from sql.aggregate import *\n >>> from sql.conditionals import *\n\nSimple selects::\n\n >>> user = Table('user')\n >>> select = user.select()\n >>> tuple(select)\n ('SELECT * FROM \"user\" AS \"a\"', ())\n\n >>> select = user.select(user.name)\n >>> tuple(select)\n ('SELECT \"a\".\"name\" FROM \"user\" AS \"a\"', ())\n\n >>> select = user.select(Count(Literal(1)))\n >>> tuple(select)\n ('SELECT COUNT(%s) FROM \"user\" AS \"a\"', (1,))\n\n >>> select = user.select(user.id, user.name)\n >>> tuple(select)\n ('SELECT \"a\".\"id\", \"a\".\"name\" FROM \"user\" AS \"a\"', ())\n\nSelect with where condition::\n\n >>> select.where = user.name == 'foo'\n >>> tuple(select)\n ('SELECT \"a\".\"id\", \"a\".\"name\" FROM \"user\" AS \"a\" WHERE (\"a\".\"name\" = %s)', ('foo',))\n\n >>> select.where = (user.name == 'foo') & (user.active == True)\n >>> tuple(select)\n ('SELECT \"a\".\"id\", \"a\".\"name\" FROM \"user\" AS \"a\" WHERE ((\"a\".\"name\" = %s) AND (\"a\".\"active\" = %s))', ('foo', True))\n >>> select.where = user.name == user.login\n >>> tuple(select)\n ('SELECT \"a\".\"id\", \"a\".\"name\" FROM \"user\" AS \"a\" WHERE (\"a\".\"name\" = \"a\".\"login\")', ())\n\nSelect with join::\n\n >>> join = user.join(Table('user_group'))\n >>> join.condition = join.right.user == user.id\n >>> select = join.select(user.name, join.right.group)\n >>> tuple(select)\n ('SELECT \"a\".\"name\", \"b\".\"group\" FROM \"user\" AS \"a\" INNER JOIN \"user_group\" AS \"b\" ON (\"b\".\"user\" = \"a\".\"id\")', ())\n\nSelect with multiple joins::\n\n >>> join1 = user.join(Table('user'))\n >>> join2 = join1.join(Table('user'))\n >>> select = join2.select(user.id, join1.right.id, join2.right.id)\n >>> tuple(select)\n ('SELECT \"a\".\"id\", \"b\".\"id\", \"c\".\"id\" FROM \"user\" AS \"a\" INNER JOIN \"user\" AS \"b\" INNER JOIN \"user\" AS \"c\"', ())\n\nSelect with group_by::\n\n >>> invoice = Table('invoice')\n >>> select = invoice.select(Sum(invoice.amount), invoice.currency,\n ... group_by=invoice.currency)\n >>> tuple(select)\n ('SELECT SUM(\"a\".\"amount\"), \"a\".\"currency\" FROM \"invoice\" AS \"a\" GROUP BY \"a\".\"currency\"', ())\n\nSelect with output name::\n\n >>> tuple(user.select(user.name.as_('First Name')))\n ('SELECT \"a\".\"name\" AS \"First Name\" FROM \"user\" AS \"a\"', ())\n\nSelect with order_by::\n\n >>> tuple(user.select(order_by=user.date))\n ('SELECT * FROM \"user\" AS \"a\" ORDER BY \"a\".\"date\"', ())\n >>> tuple(user.select(order_by=Asc(user.date)))\n ('SELECT * FROM \"user\" AS \"a\" ORDER BY \"a\".\"date\" ASC', ())\n >>> tuple(user.select(order_by=(user.date.asc, user.id.desc)))\n ('SELECT * FROM \"user\" AS \"a\" ORDER BY \"a\".\"date\" ASC, \"a\".\"id\" DESC', ())\n\nSelect with sub-select::\n\n >>> user_group = Table('user_group')\n >>> subselect = user_group.select(user_group.user,\n ... where=user_group.active == True)\n >>> user = Table('user')\n >>> tuple(user.select(user.id, where=user.id.in_(subselect)))\n ('SELECT \"a\".\"id\" FROM \"user\" AS \"a\" WHERE (\"a\".\"id\" IN (SELECT \"b\".\"user\" FROM \"user_group\" AS \"b\" WHERE (\"b\".\"active\" = %s)))', (True,))\n >>> tuple(subselect.select(subselect.user))\n ('SELECT \"a\".\"user\" FROM (SELECT \"b\".\"user\" FROM \"user_group\" AS \"b\" WHERE (\"b\".\"active\" = %s)) AS \"a\"', (True,))\n\nSelect on other schema::\n\n >>> other_table = Table('user', 'myschema')\n >>> tuple(other_table.select())\n ('SELECT * FROM \"myschema\".\"user\" AS \"a\"', ())\n\nInsert query with default values::\n\n >>> tuple(user.insert())\n ('INSERT INTO \"user\" DEFAULT VALUES', ())\n\nInsert query with values::\n\n >>> tuple(user.insert(columns=[user.name, user.login],\n ... values=[['Foo', 'foo']]))\n ('INSERT INTO \"user\" (\"name\", \"login\") VALUES (%s, %s)', ('Foo', 'foo'))\n >>> tuple(user.insert(columns=[user.name, user.login],\n ... values=[['Foo', 'foo'], ['Bar', 'bar']]))\n ('INSERT INTO \"user\" (\"name\", \"login\") VALUES (%s, %s), (%s, %s)', ('Foo', 'foo', 'Bar', 'bar'))\n\nInsert query with query::\n\n >>> passwd = Table('passwd')\n >>> select = passwd.select(passwd.login, passwd.passwd)\n >>> tuple(user.insert(values=select))\n ('INSERT INTO \"user\" SELECT \"a\".\"login\", \"a\".\"passwd\" FROM \"passwd\" AS \"a\"', ())\n\nUpdate query with values::\n\n >>> tuple(user.update(columns=[user.active], values=[True]))\n ('UPDATE \"user\" SET \"active\" = %s', (True,))\n >>> tuple(invoice.update(columns=[invoice.total], values=[invoice.amount + invoice.tax]))\n ('UPDATE \"invoice\" SET \"total\" = (\"invoice\".\"amount\" + \"invoice\".\"tax\")', ())\n\nUpdate query with where condition::\n\n >>> tuple(user.update(columns=[user.active], values=[True],\n ... where=user.active == False))\n ('UPDATE \"user\" SET \"active\" = %s WHERE (\"user\".\"active\" = %s)', (True, False))\n\nUpdate query with from list::\n\n >>> group = Table('user_group')\n >>> tuple(user.update(columns=[user.active], values=[group.active],\n ... from_=[group], where=user.id == group.user))\n ('UPDATE \"user\" AS \"b\" SET \"active\" = \"a\".\"active\" FROM \"user_group\" AS \"a\" WHERE (\"b\".\"id\" = \"a\".\"user\")', ())\n\nDelete query::\n\n >>> tuple(user.delete())\n ('DELETE FROM \"user\"', ())\n\nDelete query with where condition::\n\n >>> tuple(user.delete(where=user.name == 'foo'))\n ('DELETE FROM \"user\" WHERE (\"name\" = %s)', ('foo',))\n\nDelete query with sub-query::\n\n >>> tuple(user.delete(\n ... where=user.id.in_(user_group.select(user_group.user))))\n ('DELETE FROM \"user\" WHERE (\"id\" IN (SELECT \"a\".\"user\" FROM \"user_group\" AS \"a\"))', ())\n\nFlavors::\n\n >>> select = user.select()\n >>> select.offset = 10\n >>> Flavor.set(Flavor())\n >>> tuple(select)\n ('SELECT * FROM \"user\" AS \"a\" OFFSET 10', ())\n >>> Flavor.set(Flavor(max_limit=18446744073709551615))\n >>> tuple(select)\n ('SELECT * FROM \"user\" AS \"a\" LIMIT 18446744073709551615 OFFSET 10', ())\n >>> Flavor.set(Flavor(max_limit=-1))\n >>> tuple(select)\n ('SELECT * FROM \"user\" AS \"a\" LIMIT -1 OFFSET 10', ())\n\nLimit style::\n\n >>> select = user.select(limit=10, offset=20)\n >>> Flavor.set(Flavor(limitstyle='limit'))\n >>> tuple(select)\n ('SELECT * FROM \"user\" AS \"a\" LIMIT 10 OFFSET 20', ())\n >>> Flavor.set(Flavor(limitstyle='fetch'))\n >>> tuple(select)\n ('SELECT * FROM \"user\" AS \"a\" OFFSET (20) ROWS FETCH FIRST (10) ROWS ONLY', ())\n >>> Flavor.set(Flavor(limitstyle='rownum'))\n >>> tuple(select)\n ('SELECT \"a\".* FROM (SELECT \"b\".*, ROWNUM AS \"rnum\" FROM (SELECT * FROM \"user\" AS \"c\") AS \"b\" WHERE (ROWNUM <= %s)) AS \"a\" WHERE (\"rnum\" > %s)', (30, 20))\n\nqmark style::\n\n >>> Flavor.set(Flavor(paramstyle='qmark'))\n >>> select = user.select()\n >>> select.where = user.name == 'foo'\n >>> tuple(select)\n ('SELECT * FROM \"user\" AS \"a\" WHERE (\"a\".\"name\" = ?)', ('foo',))\n\nnumeric style::\n\n >>> Flavor.set(Flavor(paramstyle='format'))\n >>> select = user.select()\n >>> select.where = user.name == 'foo'\n >>> format2numeric(*select)\n ('SELECT * FROM \"user\" AS \"a\" WHERE (\"a\".\"name\" = :0)', ('foo',))", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://python-sql.tryton.org/", "keywords": "", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "python-sql", "package_url": "https://pypi.org/project/python-sql/", "platform": "", "project_url": "https://pypi.org/project/python-sql/", "project_urls": { "Homepage": "http://python-sql.tryton.org/" }, "release_url": "https://pypi.org/project/python-sql/1.0.0/", "requires_dist": null, "requires_python": "", "summary": "Library to write SQL queries", "version": "1.0.0" }, "last_serial": 4324881, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "14f3e107c1b44796d7cd7cba2ae5136b", "sha256": "356dff5fed4b8b11a801fdd198fda260f29e5c0ef8f9541f08403503498b6ac6" }, "downloads": -1, "filename": "python-sql-0.1.tar.gz", "has_sig": false, "md5_digest": "14f3e107c1b44796d7cd7cba2ae5136b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18664, "upload_time": "2013-08-28T16:50:11", "url": "https://files.pythonhosted.org/packages/e8/ef/bebdedab9a4f3ad64b854177d7eeee46622b8a0080dc0031bfcbf21cbfb8/python-sql-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "7b57201237bdd64c80865c28ac3fbd2e", "sha256": "ac047daa2603ffc0e3578dcd35a51ca30f078a4c75776a118038340491125b1b" }, "downloads": -1, "filename": "python-sql-0.2.tar.gz", "has_sig": true, "md5_digest": "7b57201237bdd64c80865c28ac3fbd2e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19315, "upload_time": "2013-09-18T14:47:51", "url": "https://files.pythonhosted.org/packages/d6/0c/c4dc612c4a0e485929c7e0fce3fe9da35d0f260622958b9f5abb32e8e0cb/python-sql-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "bbf8f5c6857e1e8a80479791d1a70367", "sha256": "362032168513fcf88ecccfe78b5c04c516a73f9f16337d5d180c5b339eaf5fe8" }, "downloads": -1, "filename": "python-sql-0.3.tar.gz", "has_sig": true, "md5_digest": "bbf8f5c6857e1e8a80479791d1a70367", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19804, "upload_time": "2014-01-31T18:12:58", "url": "https://files.pythonhosted.org/packages/63/ce/d324438176ca557be921c873cdf40971874df228dce6b976a1a07c6de688/python-sql-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "f2c78646ddf1fab08ae780de5efc174f", "sha256": "3a8275dbb1e8e5b1cf3d29a87677aa436d6e6fc48ad123b14079c945524023e7" }, "downloads": -1, "filename": "python-sql-0.4.tar.gz", "has_sig": true, "md5_digest": "f2c78646ddf1fab08ae780de5efc174f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21469, "upload_time": "2014-08-03T17:55:44", "url": "https://files.pythonhosted.org/packages/28/0c/ed9c5e21b928d9ea25f0b140e5556252ec3b2ebf0e18fd387477485c552a/python-sql-0.4.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "8fe611746b1c887df7d7d5a1ffd3ff14", "sha256": "25abaeac126956787a83fa5cc7fa83c06df58d8107fb763d6acf98c7bd263090" }, "downloads": -1, "filename": "python-sql-0.5.tar.gz", "has_sig": true, "md5_digest": "8fe611746b1c887df7d7d5a1ffd3ff14", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24675, "upload_time": "2015-01-29T21:58:20", "url": "https://files.pythonhosted.org/packages/e2/12/3b6afbb50882329995b560ee9c01c862a32dc503e578daffd488bf106775/python-sql-0.5.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "fa36261b4d13c04bee47e70d7c0f2275", "sha256": "c2c55883a6a1031b5f83bbf6d5a11dc28ea45c41238d2179fcf18c2aaa6347d6" }, "downloads": -1, "filename": "python-sql-0.6.tar.gz", "has_sig": true, "md5_digest": "fa36261b4d13c04bee47e70d7c0f2275", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24757, "upload_time": "2015-02-05T21:57:29", "url": "https://files.pythonhosted.org/packages/00/02/d004523127550286fef9b4872c615f906ed3f4c9260d0717c54e95211e11/python-sql-0.6.tar.gz" } ], "0.7": [ { "comment_text": "", "digests": { "md5": "d00674dbcf4e971cc3a64f2373f7255f", "sha256": "cfdafe7f101795f56efcbfdb360d6244aa6d908b02bbedc73236f64b2bd33324" }, "downloads": -1, "filename": "python-sql-0.7.tar.gz", "has_sig": true, "md5_digest": "d00674dbcf4e971cc3a64f2373f7255f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27422, "upload_time": "2015-05-19T08:58:08", "url": "https://files.pythonhosted.org/packages/62/ee/3529ed35bcc2e9b9f8615bab42efd8a4ae1ce3d6be0bc4d130c8327ceac4/python-sql-0.7.tar.gz" } ], "0.8": [ { "comment_text": "", "digests": { "md5": "01b3e95bc92458479984b9e85ed9b223", "sha256": "020ed78e77f0321f30e40f4e316e944b24a3b995ce6af6eec2d8e1aed3483376" }, "downloads": -1, "filename": "python-sql-0.8.tar.gz", "has_sig": true, "md5_digest": "01b3e95bc92458479984b9e85ed9b223", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29853, "upload_time": "2015-09-19T13:23:45", "url": "https://files.pythonhosted.org/packages/c5/4b/c8c15049bc683428c8248eb37a0f22e9ad20e7853f8215ca8deb023ed689/python-sql-0.8.tar.gz" } ], "0.9": [ { "comment_text": "", "digests": { "md5": "468fced1f59362c8db2f9ccadad9198b", "sha256": "84ddf6b3271a35885382f68f6555b4e7dff553f1124c3df8fcb99daded9d1d57" }, "downloads": -1, "filename": "python_sql-0.9-py2-none-any.whl", "has_sig": true, "md5_digest": "468fced1f59362c8db2f9ccadad9198b", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 58885, "upload_time": "2017-04-24T10:19:18", "url": "https://files.pythonhosted.org/packages/69/e7/bcd72e79f291dda7bfaf35e1298c4b948a9e09971b620496165a92f46f17/python_sql-0.9-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bb79ddfa739e9fcad37c04830eb91d18", "sha256": "ed143e06150afe957c12d64d8cbd0973cd6a99a3e218a9c5a23a70833017249f" }, "downloads": -1, "filename": "python_sql-0.9-py3-none-any.whl", "has_sig": true, "md5_digest": "bb79ddfa739e9fcad37c04830eb91d18", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 58873, "upload_time": "2017-04-24T10:24:40", "url": "https://files.pythonhosted.org/packages/b8/1d/5b14ef774cf9543e6fd88f54aabcde9045958db354cbb6cb48121fde7c10/python_sql-0.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "63351de94115d5706d8038febb520e82", "sha256": "07b51cc1c977ef5480fe671cae5075ad4b68a6fc67f4569782e06f012456d35c" }, "downloads": -1, "filename": "python-sql-0.9.tar.gz", "has_sig": true, "md5_digest": "63351de94115d5706d8038febb520e82", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30219, "upload_time": "2017-04-24T10:19:16", "url": "https://files.pythonhosted.org/packages/68/b1/e411e1564c5b40ecf4085b646660a610fcc873c7b524438678e1ab2f1d3e/python-sql-0.9.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "7dee2aedd2d09fe56aae34c9ccf35fa1", "sha256": "14fb0dabc3edfc59099987a94ef36d375abc390abeffbddb5d1e3229a3c75dc2" }, "downloads": -1, "filename": "python_sql-1.0.0-py2-none-any.whl", "has_sig": true, "md5_digest": "7dee2aedd2d09fe56aae34c9ccf35fa1", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 61652, "upload_time": "2018-09-30T12:29:58", "url": "https://files.pythonhosted.org/packages/cb/53/451a8fc2c9bf15472d342abca6bc20d5014c159bf339226b69c77d49cf33/python_sql-1.0.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3e8e654a171e6d0be0b746ac3f04dbef", "sha256": "48a8092dc513136340054cc859d4116ab300a402d5ab8a4972a44e1453b5ac83" }, "downloads": -1, "filename": "python_sql-1.0.0-py3-none-any.whl", "has_sig": true, "md5_digest": "3e8e654a171e6d0be0b746ac3f04dbef", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 61636, "upload_time": "2018-09-30T12:30:00", "url": "https://files.pythonhosted.org/packages/01/30/ef8497f633c66fee52a6bb05f122898e6cc09cfbca9c86de4fe828b38a0b/python_sql-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "74ddd9c49013eb45ce12be84661b1c6e", "sha256": "0bbbb1eef667679316ec9fc415f0b616a098e482b41eea73ed4945e0cd48d116" }, "downloads": -1, "filename": "python-sql-1.0.0.tar.gz", "has_sig": true, "md5_digest": "74ddd9c49013eb45ce12be84661b1c6e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31268, "upload_time": "2018-09-30T12:29:25", "url": "https://files.pythonhosted.org/packages/01/78/98aaead71c4575b3db254f730034e74498559e6e447c0ea9f405a35d3ad6/python-sql-1.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7dee2aedd2d09fe56aae34c9ccf35fa1", "sha256": "14fb0dabc3edfc59099987a94ef36d375abc390abeffbddb5d1e3229a3c75dc2" }, "downloads": -1, "filename": "python_sql-1.0.0-py2-none-any.whl", "has_sig": true, "md5_digest": "7dee2aedd2d09fe56aae34c9ccf35fa1", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 61652, "upload_time": "2018-09-30T12:29:58", "url": "https://files.pythonhosted.org/packages/cb/53/451a8fc2c9bf15472d342abca6bc20d5014c159bf339226b69c77d49cf33/python_sql-1.0.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3e8e654a171e6d0be0b746ac3f04dbef", "sha256": "48a8092dc513136340054cc859d4116ab300a402d5ab8a4972a44e1453b5ac83" }, "downloads": -1, "filename": "python_sql-1.0.0-py3-none-any.whl", "has_sig": true, "md5_digest": "3e8e654a171e6d0be0b746ac3f04dbef", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 61636, "upload_time": "2018-09-30T12:30:00", "url": "https://files.pythonhosted.org/packages/01/30/ef8497f633c66fee52a6bb05f122898e6cc09cfbca9c86de4fe828b38a0b/python_sql-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "74ddd9c49013eb45ce12be84661b1c6e", "sha256": "0bbbb1eef667679316ec9fc415f0b616a098e482b41eea73ed4945e0cd48d116" }, "downloads": -1, "filename": "python-sql-1.0.0.tar.gz", "has_sig": true, "md5_digest": "74ddd9c49013eb45ce12be84661b1c6e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31268, "upload_time": "2018-09-30T12:29:25", "url": "https://files.pythonhosted.org/packages/01/78/98aaead71c4575b3db254f730034e74498559e6e447c0ea9f405a35d3ad6/python-sql-1.0.0.tar.gz" } ] }