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
Built Distribution
File details
Details for the file litequery-0.5.0.tar.gz
.
File metadata
- Download URL: litequery-0.5.0.tar.gz
- Upload date:
- Size: 8.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4a390d97e22dea0d32282dbc2934816e20be02905b797fa7faf0e171686ef194 |
|
MD5 | ea9dedcffa01d4bf60770d43af2a677b |
|
BLAKE2b-256 | e45c2fa93a96fb82cd570b865e47567b3f1cba52a8883aeb932c94424a0b2cfc |
File details
Details for the file litequery-0.5.0-py3-none-any.whl
.
File metadata
- Download URL: litequery-0.5.0-py3-none-any.whl
- Upload date:
- Size: 6.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1d90d6a84cdaf9abea0e12668a6ecaa9a572ff2b58f5bf76a526ec9ca4982810 |
|
MD5 | 509b801fe19f15256287845fbb1035d7 |
|
BLAKE2b-256 | 84fc096132c23d9bf88879ecac537939bb9f221f379c74aec22104c322cdc4d0 |