Skip to content

v2.1.2

Choose a tag to compare

@nhumrich nhumrich released this 14 Oct 23:06
· 64 commits to main since this release

Release Notes - v2.1.2

Features

Column Name Remapping Without SQLAlchemy

Added support for overriding database column names when not using SQLAlchemy integration. You can now map Python attribute names to different database column names using Column(column_name='...'):

class MyTable(Table, table_name='my_table'):
    id: Column
    system_var: Column = Column(column_name='systemvar')  # Python: system_var, DB: systemvar

This is useful when your database column names don't follow Python naming conventions (e.g., legacy databases with columns like systemvar instead of system_var). See tests/test_query_builder.py:34-54 for examples.

Refactoring

Query Builder Inheritance Hierarchy

All query builders now inherit from a common QueryBuilder abstract base class:

  • SelectQueryBuilder (formerly QueryBuilder) - for SELECT queries
  • InsertBuilder - for INSERT queries
  • UpdateBuilder - for UPDATE queries
  • DeleteBuilder - for DELETE queries

This allows middleware and query handlers to accept any builder type through the common interface. The abstract base provides:

  • to_tsql() - converts to TSQL object (abstract, must implement)
  • render(style) - convenience method to get SQL + parameters directly

Breaking Change Note: The class QueryBuilder is now SelectQueryBuilder. If you were doing type hints like query: QueryBuilder, you'll need to update to either SelectQueryBuilder or the base QueryBuilder class depending on your use case.