{ "info": { "author": "shaung", "author_email": "_@shaung.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Topic :: Database", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "========\r\njsondb\r\n========\r\n\r\nOff-memory json for large data that does not fit the memory.\r\n\r\n![Build Status](https://secure.travis-ci.org/shaung/jsondb.png?branch=develop)\r\n\r\n\r\nInstallation\r\n----------------------\r\nTo install, simply run ::\r\n\r\n python setup.py install\r\n\r\n\r\nGetting started\r\n----------------------\r\n\r\nTo create a db: ::\r\n\r\n import jsondb\r\n \r\n # Create from an empty dict (the default)\r\n db = jsondb.create({})\r\n\r\n # Or a list / tuple\r\n db = jsondb.create([])\r\n\r\n\r\nto create from an existing JSON file: ::\r\n\r\n db = jsondb.from_file(json_file_path)\r\n # file-like objects are accepted as well\r\n db = jsondb.from_file(open(json_file_path, 'rb'))\r\n\r\nNow add some data to the db and access them:\r\n\r\n db['name'] = 'foo'\r\n assert db['name'] == 'foo'\r\n\r\n db['items'] = []\r\n for i in range(3):\r\n db['items'].append({\r\n 'id' : i,\r\n 'name': chr(97 + i),\r\n })\r\n\r\n assert db['items'][0]['id'] == 0\r\n assert len(db['items']) == 3\r\n\r\n assert db.get('nonexists', 'notfound') == 'notfound'\r\n\r\nIt works like an ordinary dict / list,\r\nbut to get its value, use the `data()` method:\r\n\r\n # => 'foo'\r\n print db['name'].data() \r\n\r\n # Get the data\r\n assert db.data() == {\r\n 'name' : 'foo',\r\n 'items': [\r\n {'id' : 0, 'name' : 'a'},\r\n {'id' : 1, 'name' : 'b'},\r\n {'id' : 2, 'name' : 'c'},\r\n ]\r\n }\r\n\r\n\r\nQuerying\r\n----------------------\r\n\r\njsondb also supports complex queries, in a syntax based on JSONPath,\r\nwhich is described here: http://goessner.net/articles/JsonPath/\r\n\r\n`db.query` returns a `QueryResult` object which is iterable.\r\n\r\n results = db.query('$.items.name')\r\n\r\n # Iterating the query result\r\n # => \"a b c\"\r\n for x in results:\r\n print x.data(),\r\n\r\nTo fetch all the value of the result,\r\n\r\n # => ['a', 'b', 'c']\r\n print rslt.values()\r\n\r\nTo fetch only one value,\r\n\r\n # fetch one result\r\n assert db.query('$.name').getone() == 'foo'\r\n # => 'foo'\r\n db.query('$.name').getone().data()\r\n\r\nExample of more complex queries:\r\n\r\n # Conditonal query\r\n # => 'b'\r\n print db.query('$.items[?(@.id = 1)].name').getone().data()\r\n\r\n # slicing\r\n # => ['a', 'b']\r\n print db.query('$.items[:-1].name').values()\r\n\r\n\r\nPersistence\r\n----------------------\r\n\r\nAll the data is stored on the disk.\r\nIn the current implementation, data is saved as a sqlite database,\r\nbut supports for other DBMS are on the table.\r\n\r\nboth of `create` and `from_file` accept a `url` parameter,\r\nindicating where to store the data:\r\n\r\n db = jsondb.create({}, url='path/to/filename.db')\r\n # which is equal to \r\n db = jsondb.create({}, url='sqlite3://path/to/filename.db')\r\n\r\nWhen not specified, a temporary file will be created in `/tmp` by default.\r\n\r\nTo make sure all the changes made to db being saved to the file,\r\n\r\n db.save()\r\n\r\nAnd when not needed anymore, remember to close it:\r\n\r\n db.close()\r\n\r\nOr use context manager:\r\n\r\n with jsondb.create(url='path/to/filename.db') as db:\r\n # do all the work here\r\n\r\nTo load an existing jsondb file later,\r\n\r\n db = jsondb.load('path/to/filename.db')\r\n\r\n\r\nLicense\r\n----------------------\r\n\r\nReleased under the BSD license.", "description_content_type": null, "docs_url": null, "download_url": "https://github.com/shaung/jsondb/tarball/master", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://shaung.github.io/jsondb/", "keywords": "", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "jsondb", "package_url": "https://pypi.org/project/jsondb/", "platform": "any", "project_url": "https://pypi.org/project/jsondb/", "project_urls": { "Download": "https://github.com/shaung/jsondb/tarball/master", "Homepage": "http://shaung.github.io/jsondb/" }, "release_url": "https://pypi.org/project/jsondb/0.1.2/", "requires_dist": null, "requires_python": null, "summary": "JSON file as a database", "version": "0.1.2" }, "last_serial": 994920, "releases": { "0.1.1": [], "0.1.2": [ { "comment_text": "", "digests": { "md5": "dfc2e84b1541c4fd3a5e8c5c9253f269", "sha256": "0cc039bd9e334e807cc202ff965dc41ee444977f6114b56ef970c5d3a91de2ca" }, "downloads": -1, "filename": "jsondb-0.1.2.tar.gz", "has_sig": false, "md5_digest": "dfc2e84b1541c4fd3a5e8c5c9253f269", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17563, "upload_time": "2014-02-03T02:06:38", "url": "https://files.pythonhosted.org/packages/a3/f6/22b0cfdd48f16dacab12e1e7bf8f438b6b5df5d0bd1bae9905ea5a403d5d/jsondb-0.1.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "dfc2e84b1541c4fd3a5e8c5c9253f269", "sha256": "0cc039bd9e334e807cc202ff965dc41ee444977f6114b56ef970c5d3a91de2ca" }, "downloads": -1, "filename": "jsondb-0.1.2.tar.gz", "has_sig": false, "md5_digest": "dfc2e84b1541c4fd3a5e8c5c9253f269", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17563, "upload_time": "2014-02-03T02:06:38", "url": "https://files.pythonhosted.org/packages/a3/f6/22b0cfdd48f16dacab12e1e7bf8f438b6b5df5d0bd1bae9905ea5a403d5d/jsondb-0.1.2.tar.gz" } ] }