FineSQL is a library for interacting with SQLite database from Python code, with Python objects.
Project description
FineSQL ORM
FineSQL is a lightweight Python ORM built on top of sqlite3 for educational purposes.
It provides simple table definitions, CRUD operations, and foreign key support while keeping the codebase minimal and easy to understand.
Installation
No external dependencies required — only Python standard library.
git clone https://github.com/goldendevuz/finesql
cd finesql
Quick Start
1. Define Tables
from finesql import Database, Table, Column, ForeignKey
class User(Table):
username = Column(str)
age = Column(int)
class Post(Table):
title = Column(str)
body = Column(str)
author = ForeignKey(User)
2. Initialize Database
db = Database("app.db")
db.create(User)
db.create(Post)
3. Create Records
user = User(username="Alice", age=25)
db.save(user)
post = Post(title="Hello World", body="This is my first post", author=user)
db.save(post)
4. Query Records
# Get all users
users = db.all(User)
for u in users:
print(u.id, u.username, u.age)
# Get by id
alice = db.get(User, id=1)
print(alice.username)
# Filter by field (LIKE search)
maybe_alice = db.get_by_field(User, field_name="username", value="Alice")
print(maybe_alice.username)
# Custom select (dict result)
result = db.get_user(User, field_name="username", value="Alice", return_fields=["id", "age"])
print(result) # {'id': 1, 'age': 25}
5. Update Records
alice = db.get(User, id=1)
alice.age = 26
db.update(alice)
6. Delete Records
db.delete(User, id=1)
Relationships
Foreign keys can be defined using ForeignKey.
For example, Post has an author = ForeignKey(User).
When fetching posts, the related User instance will be automatically resolved:
post = db.get(Post, id=1)
print(post.author.username)
Full Example
Here’s the complete example code in one file:
from finesql import Database, Table, Column, ForeignKey
# Define models
class User(Table):
username = Column(str)
age = Column(int)
class Post(Table):
title = Column(str)
body = Column(str)
author = ForeignKey(User)
# Initialize database
db = Database("app.db")
db.create(User)
db.create(Post)
# Create records
user = User(username="Alice", age=25)
db.save(user)
post = Post(title="Hello World", body="This is my first post", author=user)
db.save(post)
# Query records
print("All users:", db.all(User))
print("User by id:", db.get(User, id=1).username)
# Update
alice = db.get(User, id=1)
alice.age = 26
db.update(alice)
# Relationship
post = db.get(Post, id=1)
print("Post author:", post.author.username)
# Delete
db.delete(User, id=1)
API Reference
Database
create(table)→ Creates a table.save(instance)→ Inserts a record.all(table)→ Returns all records.get(table, id)→ Get record by id.get_by_field(table, field_name, value)→ LIKE search by field.get_user(table, field_name, value, return_fields)→ Dict select with custom fields.update(instance)→ Updates a record.delete(table, id)→ Deletes a record.
Table
- Base class for all models.
- Automatically provides
idfield. - Column and ForeignKey definitions supported.
Column
- Define a typed column (
int,str,float,bool,bytes).
ForeignKey
- Define foreign key to another table.
Roadmap
- Migrations
- Query builder
- Async support
- Type checking with
mypy
License
MIT © 2025 Abdulmajid Yunus
Project details
Release history Release notifications | RSS feed
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file finesql-0.1.3.tar.gz.
File metadata
- Download URL: finesql-0.1.3.tar.gz
- Upload date:
- Size: 6.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d14675493755e325ebf5ec7cede7dc4632c38efb4fc5c377189a502750f8156
|
|
| MD5 |
ce6dfd19a7527473f0267f995fb01803
|
|
| BLAKE2b-256 |
05302eafa09e80971bb4ffa5d786bfd614ee75f2bd65775c035b131c87d60479
|
File details
Details for the file finesql-0.1.3-py3-none-any.whl.
File metadata
- Download URL: finesql-0.1.3-py3-none-any.whl
- Upload date:
- Size: 6.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cd252951d1016682ba998a3093ecf46e80669f3352f0555690036e30c501fe21
|
|
| MD5 |
ec81f9e873b58a3086c03886c3ec10c8
|
|
| BLAKE2b-256 |
9ce39f7610490bc5cd7d5ecbdc31f87ebf188dc94b74d8936bcab3c5f48b0ad3
|