Skip to main content

Bajra Bajra

bajra

Bajra is a simple ORM API (for MySQL and PostGreSQL) that provide helpers to manage raw SQL in Python applications.

What Bajra can do?

Bajra allows you to write raw SQL and forget about cursors, and it's related data structures like tuples or dicts. Also allows you to write your query by pieces, making the whole thing more readable.

Let's see a few examples!

Fetching results made simple

from bajra import Bajra
from bajra.engines.postgres import PostgreSQLEngine

cater = Bajra(PostgreSQLEngine(dsn="YOUR-DATABASE-DSN"))
rows = cater.fetchall("SELECT name, surname FROM test")  # That command returns a RowResult you can iterate
for row in rows:
    print(row.name)  # You can access to the data with dot notation.
    print(row['name'])  # Also as a dict-like object.

Querying with arguments. No more pain.

from bajra import Bajra
from bajra.engines.postgres import PostgreSQLEngine

cater = Bajra(PostgreSQLEngine(dsn="YOUR-DATABASE-DSN"))
row = cater.fetchone("SELECT name, surname FROM test WHERE name = %s", ("John", ))
print(row.name)  # John
print(row.surname)  # Costa

row = cater.fetchone("SELECT name, surname FROM test WHERE name = %(name)s", {'name': 'John'})
print(row.name)  # John
print(row.surname)  # Costa

row = cater.fetchone("SELECT name, surname FROM test WHERE name = %(name)s", name='John')
print(row.name)  # John
print(row.surname)  # Costa

Querying piece by piece

from bajra import Bajra
from bajra.engines.postgres import PostgreSQLEngine

cater = Bajra(PostgreSQLEngine(dsn="YOUR-DATABASE-DSN"))
query = cater.query("SELECT * FROM test")
query.append("WHERE name = %(name)s", name="John")
row = cater.fetchone(query)
row.name  # John
row.surname  # Costa

Execute all the things.

from bajra import Bajra
from bajra.engines.postgres import PostgreSQLEngine

cater = Bajra(PostgreSQLEngine(dsn="YOUR-DATABASE-DSN"))
query = cater.query("INSERT INTO test (name, surname) VALUES")
query.append("(%(name)s, %(surname)s)", name="Thomas", surname="Jefferson")

result = cater.execute(query)
print(result.lastrowid)  # Last Row ID of the last query. (If the engine supports it.)
print(result.rowcount)  # How many rows retrieve the last query. (If the engine supports it.)
print(result.rownumber)  # Number of rows affected by the last query. (If engine supports it.)

Transactions

from bajra import Bajra
from bajra.engines.postgres import PostgreSQLEngine

cater = Bajra(PostgreSQLEngine(dsn="YOUR-DATABASE-DSN"))
cater.begin()
query = cater.query("INSERT INTO test (name, surname) VALUES")
query.append("(%(name)s, %(surname)s)", name="Marie-Cole", surname="Ross")

result = cater.execute(query)
print(result.lastrowid)  # Last Row ID of the last query. (If the engine supports it.)
print(result.rowcount)  # How many rows retrieve the last query. (If the engine supports it.)
print(result.rownumber)  # Number of rows affected by the last query. (If engine supports it.)

cater.commit()

Transactions within a context manager

from bajra import Bajra
from bajra.engines.postgres import PostgreSQLEngine


def callback_on_exception(_cater, exc_type, exc_value, traceback):
    print(exc_type)  # <class 'psycopg2.ProgrammingError'>


cater = Bajra(PostgreSQLEngine(dsn="YOUR-DATABASE-DSN"))

with cater.transaction(rollback_on_exc=True, callback_exc=callback_on_exception):
    cater.execute("INSERT INTO test (name, surname) VALUES %s, %s", ("Augustus", "Zuma"))

row = cater.fetchone("SELECT * FROM test WHERE name=%s AND surname=%s", ("Augustus", "Zuma"))
print(row)  # None, Bajra has perfomed a rollback due to a exception.

Collaborators Welcome!

If you have an idea you want to contribute in Bajra, clone the repo and raise a pull request with your feature!

Made with love in India

Metadata

Release files for bajra 0.0.1

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

Source distribution (sdist)

Source distribution for bajra 0.0.1
File Size Uploaded
bajra-0.0.1.tar.gz 10.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for bajra 0.0.1
File Interpreter ABI Platform
bajra-0.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 21.2 kB

Release files / bajra-0.0.1.tar.gz

Download URL bajra-0.0.1.tar.gz
Size 10.6 kB
Tags Source
SHA-256 checksum
How to use checksums
6911c91257865df97a19312f3c972bd6149c68e9aba40d70d571177755dfb870
BLAKE2b-256 checksum
How to use checksums
ae65fef73fee96f5e6cb417061e458f2a05db4251549dbb0d08191e27a51d925
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.1

Release files / bajra-0.0.1-py3-none-any.whl

Download URL bajra-0.0.1-py3-none-any.whl
Size 10.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d7aec783d0476b001cfe3c114763af349b3b915c8bd48ec4e8fc84205e3f758b
BLAKE2b-256 checksum
How to use checksums
a4fa4729a868ef6bac3e4b3b648fd5122dbcb00cb1fd6c2cb906b05715235cc1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.1

Release history Release notifications | RSS feed

This release

0.0.1 This release

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