Skip to main content

Simple Database API for Typed Python based PEP 249

Project description

Turu: Simple Database API for Typed Python

test pypi package

Installation

pip install turu[snowflake]

Why Turu?

SQL is a powerful language, but it's not very type safe, and recently many new SQL database engines have been created. In particular, cloud-based SQL database is difficult to test automatically in a local environment.

Turu was developed to allow for the unified handling and development of many SQL databases.

A simple interface according to PEP 249 – Python Database API Specification v2.0 is provided to easily record query results and injection mock data.

Supprted Database

Database Supported Installation
SQLite3 Yes pip install turu[sqlite3]
MySQL No -
PostgreSQL No -
Snowflake Yes pip install turu[snowflake]
BigQuery Yes pip install turu[bigquery]

Usage

Basic Usage

from pydantic import BaseModel


class Row(BaseModel):
    id: int
    name: str

connection = turu.sqlite3.connect("test.db")

with connection.execute_map(Row, "select 1, 'a'") as cursor:
    assert cursor.fetchone() == Row(id=1, name="a")

Recording Usage

import turu.sqlite3
from turu.core.record import record_as_csv

from pydantic import BaseModel


class Row(BaseModel):
    id: int
    name: str

connection = turu.sqlite3.connect("test.db")

with record_as_csv("test.csv", connection.execute_map(Row, "select 1, 'a'")) as cursor:
    assert cursor.fetchone() == Row(id=1, name="a")

Testing Usage

import turu.sqlite3

from pydantic import BaseModel


class Row(BaseModel):
    id: int
    name: str

expected1 = [Row(id=1, name="a"), Row(id=2, name="b")]
expected2 = [Row(id=3, name="c"), Row(id=4, name="d")]
expected3 = [Row(id=5, name="e"), Row(id=6, name="f")]

connection = turu.sqlite3.MockConnection()

(
    connection.chain()
    .inject_response(Row, expected1)
    .inject_response(Row, expected2)
    .inject_response(Row, expected3)
)

for expected in [expected1, expected2, expected3]:
    with connection.execute_map(Row, "select 1, 'a'") as cursor:
        assert cursor.fetchall() == expected

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

turu-0.4.4.tar.gz (2.3 kB view hashes)

Uploaded Source

Built Distribution

turu-0.4.4-py3-none-any.whl (2.2 kB view hashes)

Uploaded Python 3

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