Skip to main content

database-testing-tools

Database Testing Tools comprises a suite of generalised tests to run on your database, and produce reports for a notebook. It is designed for pre-production checks for curated databases, but can also be useful for monitoring changes over time. It can be particularly useful when combined with papermill, which can be used to parameterize, execute and store notebooks as part of your pipeline.

Installation

pip install database_testing_tools

Usage

The package implements a Tester class, from which you can invoke a number of built-in tests and optional plotting features.

from database_testing_tools import Tester
test = Tester()
database = "my_database_name"
out = test.check_all_tables_return_data(db_name=database)

Tests return two outputs: the result of the test; and some nice graphical representation of the test - either a markdown table, or a plot using the Altair plotting library.

The class also collects the results of the tests for an overall report, which you can access with the Tester.get_results_table() function.

You can find a notebook which demonstrates the functions available in the package.

Curated database assumptions - SCD2 vs Snapshotting

The tests in this package assume the database being tested is versioned in one of two ways:

  1. Slowly Changing Dimensions type 2 (SCD2): where the database includes records of inserts and updates to records. In curated databases a start time and end time will be added to each record. The start time is when the record is either created or last updated; the end time is either when the record was next updated, or a date arbitrarily far in the future to signify that it is the current version of the record. By filtering on these dates, it is possible to view the state of the database at a given point in time.
  2. Snapshots: when SCD2 isn't possible or is impractical, versions of the database are recorded with an associated snapshot date based on date of extraction.

These methods require different methods to compare versions of the database over time, so there are some separate functions to handle them in their own way.

Query engines

By default, the package uses pydbtools to run the queries in the package on a given Amazon Athena database. However, it is possible to connect to your own database by making an extension of the BaseQueryEngine class defined in utils.py.

An engine for DuckDB is included, and is used for the demo and unit tests in this package. A basic use of the DuckDB engine looks like this:

import duckdb
from database_testing_tools.utils import DuckDbEngine
from database_testing_tools import Tester

conn = duckdb.connect()
query_engine = DuckDbEngine(conn)
tester = Tester(query_engine=query_engine)
database = "some_database"

tester.check_all_tables_return_data(db_name=database)

Alternative database engines should follow a similar pattern to the DuckDB engine - an initialiser that includes the database connection object, and an implementation of the run_query function that runs a given SQL query and returns the result as a pandas dataframe. As the built-in tests use the Trino SQL dialect, it is recommended to transpile the SQL with sqlglot to ensure the tests are executed correctly.

Metadata

Release files for database-testing-tools 1.0.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for database-testing-tools 1.0.5
File Size Uploaded
database_testing_tools-1.0.5.tar.gz 14.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for database-testing-tools 1.0.5
File Interpreter ABI Platform
database_testing_tools-1.0.5-py3-none-any.whl Python 3 none any Details

Total release size: 28.0 kB

Release files / database_testing_tools-1.0.5.tar.gz

Download URL database_testing_tools-1.0.5.tar.gz
Size 14.5 kB
Tags Source
SHA-256 checksum
How to use checksums
14abd039803757e4ea00e152681aeb6be0d0e9cabb612e0915536fc850c6dc76
BLAKE2b-256 checksum
How to use checksums
e20a1af59eb7e15fe811d3842aae06b45714635c0a81da8b7a50ace28fa59331
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.0.1 CPython/3.12.8

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Dec 17, 2024.

Transparency log

Release files / database_testing_tools-1.0.5-py3-none-any.whl

Download URL database_testing_tools-1.0.5-py3-none-any.whl
Size 13.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0519d1f02ffa137ceae789d392fc072339ec5f114aaf15f929ffd6ae85f3941d
BLAKE2b-256 checksum
How to use checksums
b73f1435d145a7c8cb69edc56fc1244addb3b51b775fccb1a9a8cd780314f67d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.0.1 CPython/3.12.8

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Dec 17, 2024.

Transparency log

Release history Release notifications | RSS feed

This release

1.0.5 This release

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page