{
"info": {
"author": "Matt Boyer",
"author_email": "mboyer@sdf.org",
"bugtrack_url": null,
"classifiers": [
"Development Status :: 2 - Pre-Alpha",
"Intended Audience :: Science/Research",
"License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6",
"Topic :: Database",
"Topic :: System :: Recovery Tools"
],
"description": "Bring the shine back into your database with SQBrite!\n=====================================================\n\n.. image:: https://travis-ci.org/mattboyer/sqbrite.svg?branch=master\n :target: https://travis-ci.org/mattboyer/sqbrite\n :alt: Continuous Integration status\n\n.. image:: https://scrutinizer-ci.com/g/mattboyer/sqbrite/badges/quality-score.png?b=master\n :target: https://scrutinizer-ci.com/g/mattboyer/sqbrite/?branch=master\n :alt: Scrutinizer Code Quality\n\n.. image:: https://img.shields.io/pypi/v/sqbrite.svg\n :target: https://pypi.python.org/pypi/sqbrite/\n :alt: Latest Version\n\n.. image:: https://img.shields.io/pypi/format/sqbrite.svg\n :target: https://pypi.python.org/pypi/sqbrite/\n :alt: Download format\n\n.. image:: https://img.shields.io/pypi/pyversions/sqbrite.svg\n :target: https://pypi.python.org/pypi/sqbrite/\n :alt: Supported Python versions\n\nSQBrite is a data recovery/forensics tool for `SQLite `_ databases. It uses a Python 3 implementation of the `SQLite on-disk file format `_ to recover deleted table rows.\n\nSQBrite's name is inspired by `PL Daniels' `_ `undark `_, but is a completely separate implementation.\n\n.. image:: https://asciinema.org/a/118939.png\n :target: https://asciinema.org/a/118939\n :alt: SQBrite demo terminal recording\n\nInstalling SQBrite\n------------------\n\nSQBrite requires Python 3. To install, simply run:\n\n.. code-block:: bash\n\n $ pip3 install --user sqbrite\n $ sqbrite --help\n\nBackground\n----------\n\nSQLite uses a paginated data model in which each database is a collection of same-size *pages*. There are several kinds of pages, of which one type (B-Tree Table Leaf pages) contains the starting point for actual data belonging to individual table rows.\n\nWhen a row is deleted by means of a ``DELETE FROM table (...)`` statement, the space occupied by that row's data (a *record*) within the relevant B-Tree Table Leaf page is marked as free and may subsequently be used to store new records or update existing records. However, it is common to see freed space within a page (a *freeblock*, in SQLite parlance) left alone after rows are deleted. In that case, it ***may*** be possible to retrieve deleted row data from within the freeblock.\n\nHeuristics\n++++++++++\n\nThe SQLite file format doesn't keep track of where deleted records start and end within a leaf page's freeblocks. This means that SQBrite needs a mechanism to find out where record headers start. This is achieved through the use of byte-wise regular expressions specific to tables in known databases. These regular expressions and the offset that separates matches from the first byte in a well-formed header are stored in a user-editable YAML file.\n\nSQBrite aims to ship with heuristics for popular SQLite databases, so **do** send pull requests if you've got good results with your heuristics.\n\nFeatures\n--------\n\n- Export all records to CSV or reinject \"undeleted\" records into a copy of the database\n- Extensible heuristics - just add entries to ``~/.local/share/sqbrite/sqbrite.yaml``!\n- SQBrite can recover records from within active B-tree table leaf pages or from former table-leaf Freelist pages.\n- Heuristics for iOS and Firefox databases\n\nLimitations\n-----------\n\n- SQBrite works better when ``ptrmap`` pages are present\n- The ``undelete`` subcommand may fail when re-inserting deleted rows into a table causes a constraint violation\n- SQBrite cannot recover records deleted with the `SQLite secure_delete pragma `_ enabled\n- Recovering data from overflow pages that have become Freelist leaf pages is not currently supported\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/mattboyer/sqbrite",
"keywords": "",
"license": "",
"maintainer": "",
"maintainer_email": "",
"name": "sqbrite",
"package_url": "https://pypi.org/project/sqbrite/",
"platform": "",
"project_url": "https://pypi.org/project/sqbrite/",
"project_urls": {
"Homepage": "https://github.com/mattboyer/sqbrite"
},
"release_url": "https://pypi.org/project/sqbrite/0.16/",
"requires_dist": null,
"requires_python": "",
"summary": "SQBrite is a data recovery tool for SQLite databases",
"version": "0.16"
},
"last_serial": 2867597,
"releases": {
"0.15": [
{
"comment_text": "",
"digests": {
"md5": "a7fffd0f4bb593c698c020ac02197af7",
"sha256": "8bd61d948fbcad8fc2d3469f6003ff8c982f62c60dee1d898cfa3f7fd18492e8"
},
"downloads": -1,
"filename": "sqbrite-0.15-py3-none-any.whl",
"has_sig": false,
"md5_digest": "a7fffd0f4bb593c698c020ac02197af7",
"packagetype": "bdist_wheel",
"python_version": "3.6",
"requires_python": null,
"size": 19434,
"upload_time": "2017-05-03T22:58:25",
"url": "https://files.pythonhosted.org/packages/84/e3/255ccca3b4889e22f4a5600ccdf065baf569cba21819bf481a098f379cab/sqbrite-0.15-py3-none-any.whl"
}
],
"0.16": [
{
"comment_text": "",
"digests": {
"md5": "5605e8db1bb9877c28a3f663bd049bcb",
"sha256": "6c83f512ddb14bcf7a118f27a715e145b728e56cd37a5dfad9a86089d2914fc4"
},
"downloads": -1,
"filename": "sqbrite-0.16-py3-none-any.whl",
"has_sig": false,
"md5_digest": "5605e8db1bb9877c28a3f663bd049bcb",
"packagetype": "bdist_wheel",
"python_version": "3.6",
"requires_python": null,
"size": 29253,
"upload_time": "2017-05-11T17:39:36",
"url": "https://files.pythonhosted.org/packages/89/9b/7af1ceec40c46616538269c0d4eb654c892118a7db2e9011f3dd83efd34c/sqbrite-0.16-py3-none-any.whl"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "5605e8db1bb9877c28a3f663bd049bcb",
"sha256": "6c83f512ddb14bcf7a118f27a715e145b728e56cd37a5dfad9a86089d2914fc4"
},
"downloads": -1,
"filename": "sqbrite-0.16-py3-none-any.whl",
"has_sig": false,
"md5_digest": "5605e8db1bb9877c28a3f663bd049bcb",
"packagetype": "bdist_wheel",
"python_version": "3.6",
"requires_python": null,
"size": 29253,
"upload_time": "2017-05-11T17:39:36",
"url": "https://files.pythonhosted.org/packages/89/9b/7af1ceec40c46616538269c0d4eb654c892118a7db2e9011f3dd83efd34c/sqbrite-0.16-py3-none-any.whl"
}
]
}