Skip to main content

FineSQL is a library for interacting with SQLite database from Python code, with Python objects.

Project description

FineSQL ORM

Finesql Purpose Python License

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 id field.
  • 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

finesql-0.1.3.2.tar.gz (6.0 kB view details)

Uploaded Source

Built Distribution

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

finesql-0.1.3.2-py3-none-any.whl (6.1 kB view details)

Uploaded Python 3

File details

Details for the file finesql-0.1.3.2.tar.gz.

File metadata

  • Download URL: finesql-0.1.3.2.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

Hashes for finesql-0.1.3.2.tar.gz
Algorithm Hash digest
SHA256 d9166e5d32fbe8fcdcf09982e1dfb7912d21c05dcebaecbec8474b78c3527346
MD5 19259d3de1091bdb6bb40544e5d0ece5
BLAKE2b-256 9ea380120a63dc35038309f58ef6087fbd62d6500af884c9f538d30a5a1e5674

See more details on using hashes here.

File details

Details for the file finesql-0.1.3.2-py3-none-any.whl.

File metadata

  • Download URL: finesql-0.1.3.2-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

Hashes for finesql-0.1.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 f198c8e67028dc32a3a73333a76a8c40c874779725a19152e22f5a8915fd2e9a
MD5 251bfdd176900223326a36a199522cf3
BLAKE2b-256 a62bca9206de2640012d899273d8ea9fe78583816bc0a0442e9e2d70537a9f97

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