Skip to main content

SQLAlchemy utilities for normalising / denormalising table data, useful for CSV

Project description

sqlalchemy-csv-normalise

https://img.shields.io/pypi/v/sqlalchemy-csv-normalise.svg https://travis-ci.com/mohawk2/sqlalchemy-csv-normalise.svg?branch=master Documentation Status Updates

SQLAlchemy utilities for normalising / denormalising table data, useful for CSV

Where a table is normalised to have “lookup tables” of values referred to by e.g. a numeric foreign-key ID, these functions will enable extraction of the data (or conversely, loading from such) with the looked-up values substituted in. Among other things, this allows more human-friendly data editing in e.g. a spreadsheet.

Example:

from sqlalchemy_csv_normalise import denormalise_prepare
q, col_names = denormalise_prepare(db.session, table)
filename = table_to_filename(table)
with open(filename, 'w', newline='') as csv_file:
    csv_file_writer = csv.writer(csv_file)
    csv_file_writer.writerow(col_names)
    csv_file_writer.writerows(q.all())

from sqlalchemy_csv_normalise import renormalise_prepare, empty_deleter,\
    type_coercer
row_maker = renormalise_prepare(db.session, table)
row_cleaner = empty_deleter(table)
row_coercer = type_coercer(table)
filename = table_to_filename(table)
with open(filename, newline='') as csv_file:
    for d in csv.DictReader(csv_file):
        row = row_coercer(row_cleaner(row_maker(d)))
        db.session.add(table(**row))
db.session.commit()

Features

  • denormalise_prepare(session, table, colname_tidier)

Returns SQLAlchemy query, and the column-names it will return. The query will denormalise any foreign keys (FKs) if they refer to a table with a unique column that is not its primary key.

The names of any FK columns will have _id taken off the end as a simple heuristic. Override this by providing a colname_tidier.

  • empty_deleter(table)

Returns function that returns given dict minus empty strings for nullable columns. Useful because CSV has no way to record NULL.

  • type_coercer(table)

Returns function that given a row dict will coerce values. Works on dates and booleans. Will only operate on strings, so if you have pass in a row that has already got non-string values, they will not be affected.

  • renormalise_prepare(session, table, colname_tidier)

Returns function that will renormalise given dictionary Does the inverse of denormalise_prepare.

Credits

This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.

History

0.1.1 (2020-02-01)

  • First release on PyPI.

0.1.2 (2020-02-01)

  • make type_coercer only affect string values

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

sqlalchemy-csv-normalise-0.1.2.tar.gz (11.2 kB view details)

Uploaded Source

Built Distribution

sqlalchemy_csv_normalise-0.1.2-py2.py3-none-any.whl (6.2 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file sqlalchemy-csv-normalise-0.1.2.tar.gz.

File metadata

  • Download URL: sqlalchemy-csv-normalise-0.1.2.tar.gz
  • Upload date:
  • Size: 11.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/42.0.2 requests-toolbelt/0.9.1 tqdm/4.41.0 CPython/3.6.9

File hashes

Hashes for sqlalchemy-csv-normalise-0.1.2.tar.gz
Algorithm Hash digest
SHA256 b6b90762ec8d0f7a2a0be714c7b0ec37bccd7f9288951c3a3b98531adddc80a6
MD5 00505d8d44af15acba674ced2ea7f675
BLAKE2b-256 4dae13a73d0c0f09482e27432a933599c77f73446665244da62819ed8c2dd069

See more details on using hashes here.

File details

Details for the file sqlalchemy_csv_normalise-0.1.2-py2.py3-none-any.whl.

File metadata

  • Download URL: sqlalchemy_csv_normalise-0.1.2-py2.py3-none-any.whl
  • Upload date:
  • Size: 6.2 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/42.0.2 requests-toolbelt/0.9.1 tqdm/4.41.0 CPython/3.6.9

File hashes

Hashes for sqlalchemy_csv_normalise-0.1.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 3c479a22ca5a4149c7f8606ef16a71d40948bc63d136441fa9575f40b00ae11b
MD5 2a9f42c29bb73c17f28d863bce5b4cef
BLAKE2b-256 0bc2df068dd89c2eb336a8beca39bb6c5bf2ff86d8ede59905a8f81fd2e9667e

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