Skip to main content

A handy way to interact with an SQLite database from Python

Project description

Litequery

Litequery is a minimalist 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, with the flexibility to operate in both asynchronous and synchronous modes.

Why Litequery?

  • Simplicity: Define SQL queries in .sql files. No complex ORM layers.
  • Async first: Built for modern async Python, but also supports synchronous operations for traditional use cases.
  • 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. Choose async or sync setup based on your needs. It's as straightforward as it sounds.

import litequery
import asyncio


async def main():
    lq = litequery.setup("database.db", "queries.sql", use_async=True)
    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 in both async and sync contexts, 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.6.2.tar.gz (29.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

litequery-0.6.2-py3-none-any.whl (7.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: litequery-0.6.2.tar.gz
  • Upload date:
  • Size: 29.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.23

File hashes

Hashes for litequery-0.6.2.tar.gz
Algorithm Hash digest
SHA256 73cb5da6c004b5848f1d7ce25c1b444aed7b06932f3e2114d1f0d6f4fa5e7953
MD5 3e9f6b1486d5c6adba3dfe178edfdce3
BLAKE2b-256 7ff0747123321e36234f70047a40b10469c6d5078bef4639c7c38c1e49e69146

See more details on using hashes here.

File details

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

File metadata

  • Download URL: litequery-0.6.2-py3-none-any.whl
  • Upload date:
  • Size: 7.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.23

File hashes

Hashes for litequery-0.6.2-py3-none-any.whl
Algorithm Hash digest
SHA256 8757ff8065f86e9039b89a6f0ec77e94d7b5c7073698af7704ab99e9641c7555
MD5 7b537d7fe7d48c7bebf190bddbeb509e
BLAKE2b-256 1edd3604ca9f1e2b8f69c257193b69a47751980907d436f31c67f7bdc88809fd

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page