Skip to main content

Artifex

Typed Python SQLite/PostgreSQL query builder.

This is in early development and may see massive refactor.

Usage

Use artifex functions delete, insert_into, select, update to build a query. Then call prepare() to get a tuple comprising a list of parameters used in the query and the query itself. Anywhere a parameter was used in the query will be replaced with ?, this way the database can handle param binding.

Black Formatted Example

from sql_artifex import Column, Table, and_, join, select


class User(Table):
    id = Column()
    first = Column()
    last = Column()


class Note(Table):
    id = Column()
    user_id = Column()
    value = Column()


sql, params = (
    select(
        User.id,
        User.first,
        User.last,
        Note.id.as_("note_id"),
        Note.value,
    )
    .from_(
        User,
        join(Note).on(Note.user_id == User.id),
    )
    .where(
        User.id == 1,
        and_(Note.value == "test_note"),
    )
    .order_by(
        Note.value.desc(),
    )
).prepare()

assert params == [1, "test_note"]
expected = " ".join(
    [
        "SELECT",
        '"user".id,',
        '"user".first,',
        '"user".last,',
        '"note".id AS note_id,',
        '"note".value',
        'FROM "user"',
        'JOIN "note" ON "note".user_id = "user".id',
        'WHERE "user".id = ? AND "note".value = ?',
        'ORDER BY "note".value DESC',
    ]
)
assert sql == expected

Create Table

from sql_artifex import Column, Table
from sql_artifex.types import TEXT, TIMESTAMP, UUID


class User(Table):
    id = Column(UUID(), primary=True)
    email = Column(TEXT(), unique=True, index=True)
    first = Column(TEXT())
    last = Column(TEXT())
    verified_at = Column(TIMESTAMP(with_time_zone=True))


User.table_set_unique_together(User.fist, User.last)
print(User.table_get_create())

Prints:

CREATE TABLE IF NOT EXISTS "user" (
  "id" UUID PRIMARY KEY,
  "email" TEXT NOT NULL UNIQUE,
  "first" TEXT NOT NULL,
  "last" TEXT NOT NULL,
  "verified_at" TIMESTAMP WITH TIME ZONE NOT NULL
);
CREATE INDEX email_idx ON "user" (email);

Support the Developer

Buy Me a Coffee

Metadata

Release files for sql-artifex 0.62.0

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

Source distribution (sdist)

Source distribution for sql-artifex 0.62.0
File Size Uploaded
sql_artifex-0.62.0.tar.gz 13.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for sql-artifex 0.62.0
File Interpreter ABI Platform
sql_artifex-0.62.0-py3-none-any.whl Python 3 none any Details

Total release size: 29.1 kB

Release files / sql_artifex-0.62.0.tar.gz

Download URL sql_artifex-0.62.0.tar.gz
Size 13.5 kB
Tags Source
SHA-256 checksum
How to use checksums
a72bec45cdf9e95f4b64322d58d1dd7374f57a471aad6de65eaa0e1fccf6d0e8
BLAKE2b-256 checksum
How to use checksums
64b9cba8645eb127fa7b07eaa71232d8b20ae1e516cbc460d7c5132fb23d7584
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Fedora Linux","version":"43","id":"","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / sql_artifex-0.62.0-py3-none-any.whl

Download URL sql_artifex-0.62.0-py3-none-any.whl
Size 15.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5284378ac432d3c66522e7f072e55e866a06b8e644cf27870de74099ef33f17c
BLAKE2b-256 checksum
How to use checksums
a5a090d98b8d9ac67e7a7108453fc2b73615c4cb23ddab1673e82a874b5348c9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Fedora Linux","version":"43","id":"","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

0.62.0 This release

2 release files

0.61.0

2 release files

0.60.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