Skip to main content

A handy way to interact with an SQLite database from Python

Project description

Litequery

Litequery is a minimalist, async-first library for interacting with SQLite in Python. It lets you define your queries once and call them as methods. No ORM bloat, just raw SQL power.

Why Litequery?

  • Simplicity: Define SQL queries in .sql files. No complex ORM layers.
  • Async first: Built for modern async Python with aiosqlite.
  • Flexible: Supports different SQL operations seamlessly.

Installation

pip install litequery

Getting Started

Define Your Queries

Create a queries.sql file. Name your queries using comments and write them in pure SQL.

-- name: get_all_users
SELECT * FROM users;

-- name: get_user_by_id^
SELECT * FROM users WHERE id = :id;

-- name: get_last_user_id$
SELECT MAX(id) FROM users;

-- name: insert_user<!
INSERT INTO users (name, email) VALUES (:name, :email);

-- name: delete_all_users!
DELETE FROM users;

Using Your Queries

Define your database and queries, and then call them as methods. It's as straightforward as it sounds.

import litequery
import asyncio


async def main():
    lq = litequery.setup("database.db", "queries.sql")
    await lq.connect()

    user_id = await lq.insert_user(name="Alice", email="alice@example.com")
    print(user_id)

    users = await lq.get_all_users()
    print(users)

    user = await lq.get_user_by_id(id=user_id)
    print(user)

    rows_count = await lq.delete_all_users()

    await lq.disconnect()


asyncio.run(main())

Transaction Support

Litequery also supports transactions, allowing you to execute multiple queries atomicaly.

import litequery
import asyncio


async def main():
    lq = litequery.setup("database.db", "queries.sql")
    await lq.connect()

    try:
        async with lq.transaction():
            await lq.insert_user(name="Charlie", email="charlie@example.com")
            raise Exception("Force rollback")
            await lq.insert_user(name="Eve", email="eve@example.com")
    except Exception:
        print("Transaction failed")

    users = await lq.get_all_users()
    print(users)

    await lq.disconnect()


asyncio.run(main())

Wrapping Up

Litequery is all about simplicity and efficiency. Why wrestle with bloated ORMs when you can have raw SQL power? If you think there's a better way or have suggestions, let's hear them. Happy querying!

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

litequery-0.2.0.tar.gz (6.9 kB view details)

Uploaded Source

Built Distribution

litequery-0.2.0-py3-none-any.whl (4.5 kB view details)

Uploaded Python 3

File details

Details for the file litequery-0.2.0.tar.gz.

File metadata

  • Download URL: litequery-0.2.0.tar.gz
  • Upload date:
  • Size: 6.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.19

File hashes

Hashes for litequery-0.2.0.tar.gz
Algorithm Hash digest
SHA256 566e5d7611017335fe8fd3458725af3a3e42dabb869a7845666a3f613fe203fd
MD5 221e4f185395c661883f6a919242a7d4
BLAKE2b-256 5052126c112bc162b049e728a184607d86c3c2426bdfd376224798a7bd2ef444

See more details on using hashes here.

File details

Details for the file litequery-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: litequery-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 4.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.19

File hashes

Hashes for litequery-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2bcc7dea5888615135f9bd62f68c13433060954e411da8c2ac9b62287bab7b35
MD5 919e92964ccd11cc8b364369c220eca6
BLAKE2b-256 92787fd0f5ead8d2c138978d648c1d9d212216bb2a5103248b6114e18f134aa6

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