QueryBuilder class provides a fluent interface for building complex SQL queries in Framefox. It offers a chainable API that makes queries more readable and maintainable.
QueryBuilder Class
TheQueryBuilder is initialized with an EntityManager and a model:
framefox/core/orm/query_builder.py:20
Getting a QueryBuilder
From a Repository
The recommended way is to get aQueryBuilder from a repository:
framefox/core/orm/abstract_repository.py:106
Direct Instantiation
You can also create aQueryBuilder directly:
Building Queries
SELECT Queries
Start a SELECT query with theselect() method:
framefox/core/orm/query_builder.py:40
Usage:
UPDATE Queries
Create UPDATE queries with theupdate() method:
framefox/core/orm/query_builder.py:48
Usage:
DELETE Queries
Create DELETE queries with thedelete() method:
framefox/core/orm/query_builder.py:44
Usage:
Filtering and Conditions
WHERE Clauses
Add WHERE conditions using thewhere() method:
framefox/core/orm/query_builder.py:52
Usage:
HAVING Clauses
Add HAVING conditions for grouped queries:framefox/core/orm/query_builder.py:67
Usage:
Ordering Results
ORDER BY
Sort results using theorder_by() method:
framefox/core/orm/query_builder.py:71
Usage:
Pagination
LIMIT
Limit the number of results:framefox/core/orm/query_builder.py:75
OFFSET
Skip a number of results:framefox/core/orm/query_builder.py:79
Usage:
Joins
Add JOIN clauses to your queries:framefox/core/orm/query_builder.py:56
Usage:
Executing Queries
execute()
Execute the query and return all results:framefox/core/orm/query_builder.py:123
Usage:
first()
Get only the first result:framefox/core/orm/query_builder.py:135
Usage:
last()
Get the last result by reversing the sort order:framefox/core/orm/query_builder.py:144
Usage:
Advanced Usage
Complex Query Example
Aggregation Queries
Subqueries
Bulk Updates
Conditional Bulk Deletes
Building Dynamic Queries
Best Practices
- Chain methods for readability: Each method returns
selffor fluent chaining - Use first() for single results: More efficient than
execute()[0] - Add indexes for filtered fields: Fields in WHERE clauses should be indexed
- Use order_by with last(): The
last()method requires a sort order - Limit large result sets: Always use
limit()for potentially large queries - Validate before bulk operations: Be careful with UPDATE and DELETE without WHERE clauses
- Use type hints: Leverage Python’s type system for better IDE support
Next Steps
Repositories
Learn about repository pattern
Entities
Define your database models