Skip to main content

Parsing SQL Dumps to JSON Objects

Project description

sqldump2json

PyPI - Python Version PyPI - Version Total Downloads

Parse SQL dumps into JSON objects.

A tool for administrators, data scientists and hackers. With this tool you no longer need to import dumps into Databases. You can extract INSERT data as JSON and analyze them with jq or insert into Mongo/Elastic/etc. The dump is not read entirely into RAM, so this utility can be used to process files of any size. And it can even parse corrupted dumps.

Supported DBMS: MySQL, SQL Server, PotsgreSQL and some other (not all formats).

Installation for normal Arch-based Linux ditros:

# install pipx
yay -S python-pipx

# install package from pypi
pipx install sqldump2json

# install lastet version from github
pipx install git+https://github.com/s3rgeym/sqldump2json.git

For other shit like Ubuntu you need to do more steps:

  • Install pyenv or asdf-vm.
  • Install latest python version and make it global via pyenv or asdf-vm.
  • Install sqldump2json.
  • Or use Docker.

CLI

Usage:

sqldump2json [ -h ] [ -i INPUT ] [ -o OUTPUT ] [ ... ]

Output format is JSONL:

echo "INSERT INTO data VALUES (1, 'foo'), (2, 'bar'), (3, 'baz');" | sqldump2json
{"table_name": "data", "values": [1, "foo"]}
{"table_name": "data", "values": [2, "bar"]}
{"table_name": "data", "values": [3, "baz"]}

Values are converted to dict only if the INSERT INTO contains a list of fields or the fields are declared in CREATE TABLE:

$ sqldump2json <<< "INSERT INTO data VALUES (NULL, 3.14159265, FALSE, 'Привет', 0xDEADBEEF);" | jq
{
  "table_name": "data",
  "values": [
    null,
    3.14159265,
    false,
    "Привет",
    "3q2+7w=="
  ]
}

$ sqldump2json <<< 'INSERT INTO `page` (title, contents) VALUES ("Title", "Text goes here");' | jq
{
  "table_name": "page",
  "values": {
    "title": "Title",
    "contents": "Text goes here"
  }
}

Using together with grep:

grep 'INSERT INTO `users`' /path/to/dump.sql | sqldump2json | jq -r '.values | [.username, .password] | @tsv' > output.csv

Also supports basic arifmetic and boolean operations:

$ echo 'insert into test (result) values (-2 + 2 * 2);' | sqldump2json
{"table_name": "test", "values": {"result": 2}}

Scripting

If you were looking for a way how to import data from SQL to NoSQL databases and etc:

#!/usr/bin/env python
from sqldump2json import DumpParser
...
if __name__ == '__main__':
    parser = DumpParser()
    for item in parser.parse("/path/to/dump.sql"):
        do_something(item)

Development

Run tests:

poetry run python -m unittest

TODO LIST

  • Add support mysql strings with charset (eg, _binary '\x00...'). + X'...'
  • Строки должны конкатенироваться, если идут подряд.
  • Improve I/O performance. Тут хз что делать, потому как буфер не особо помогает. Токены так или иначе нужно читать посимвольно. Можно было разбирать целые строки, НО я смотрел дампы, у меня и отдельные строки занимают по 1.5 гигабайта, что, конечно, уже в раму влезет, но текущая реализация тем и хороша, что жрет не больше пары сотен мегабайт (зато грузит процессор). У меня есть дамп одного взломанного сайта, он весит 23 гига и в нем содержится почти 160 миллионов записей, если запустить его парсинг без вывода в консоль отладочной информации (!это очень важно, тк вывод в консоль сильно тормозит) с дополнительными флагами -b128k -o /dev/null, он будет парситься 5 часов, что меня не очень устраивает, поэтому советую использовать совместно с grep. Тут, конечно, негативно влияет и использование Btrfs со сжатием (сжатый дамп на диске занимает всего 3.6G). От игры с размером буфера я значительного прироста скорости парсинга не заметил (возможно, эта сомнительная фича будет удалена). Ускорения получиться добиться только при переписании проекта на что-то другое. Я пробовал через codon его запускать, то тот много чего не поддерживает.
  • Переименовать проект в parsedump?

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sqldump2json-0.3.6.tar.gz (13.9 kB view details)

Uploaded Source

Built Distribution

sqldump2json-0.3.6-py3-none-any.whl (12.7 kB view details)

Uploaded Python 3

File details

Details for the file sqldump2json-0.3.6.tar.gz.

File metadata

  • Download URL: sqldump2json-0.3.6.tar.gz
  • Upload date:
  • Size: 13.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.6.1 CPython/3.11.5 Linux/6.5.9-arch2-1

File hashes

Hashes for sqldump2json-0.3.6.tar.gz
Algorithm Hash digest
SHA256 459fcc0c423857fbc112e60a1f19cd4f26565352ebed54d837416464a1b63615
MD5 3c24aba4f953da05f2fcbf2b97602611
BLAKE2b-256 2fb8f6ceea29e4386f9defd0c26f0dd5de52c013cc91f7e6f82087d45145ed00

See more details on using hashes here.

File details

Details for the file sqldump2json-0.3.6-py3-none-any.whl.

File metadata

  • Download URL: sqldump2json-0.3.6-py3-none-any.whl
  • Upload date:
  • Size: 12.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.6.1 CPython/3.11.5 Linux/6.5.9-arch2-1

File hashes

Hashes for sqldump2json-0.3.6-py3-none-any.whl
Algorithm Hash digest
SHA256 9a4edcc64e480734e2c442327c194b4cf212c316d83e9ab02a2b884d4f418dca
MD5 eef9f7683af3227822b0af5f6cfd1f71
BLAKE2b-256 e78b19e4e25fdf27e59250be5b610555529c22bcfa32aacb143c8cf469caf8f4

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page