SQLAlchemy Generator¶
Generate SQLAlchemy Table objects from Flycatcher schemas.
create_sqlalchemy_table(schema_cls, table_name=None, metadata=None)
¶
Generate a SQLAlchemy Table from a Schema class.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
schema_cls
|
type[Schema]
|
A subclass of Schema used to define the table schema. |
required |
table_name
|
str
|
The name of the SQL table to create. If not provided, defaults to the lowercase schema class name with trailing 's' added. Note: uses simple pluralization (e.g., 'person' -> 'persons'). |
None
|
metadata
|
MetaData
|
An existing MetaData instance. If not provided, a new MetaData object is created. |
None
|
Returns:
| Type | Description |
|---|---|
Table
|
An instance of SQLAlchemy Table corresponding to the schema. |
Source code in src/flycatcher/generators/sqlalchemy.py
Usage¶
The create_sqlalchemy_table function is typically called via the Schema.to_sqlalchemy() method:
from flycatcher import Schema, Field
from sqlalchemy import create_engine, MetaData
class UserSchema(Schema):
id: int = Field(primary_key=True)
name: str = Field(min_length=1, max_length=100)
# Generate SQLAlchemy table
metadata = MetaData()
users_table = UserSchema.to_sqlalchemy(table_name="users", metadata=metadata)
# Use with SQLAlchemy
engine = create_engine("sqlite:///example.db")
metadata.create_all(engine)
Table Naming¶
If table_name is not provided, the table name is automatically generated from the schema class name:
- Removes "Schema" suffix if present
- Converts to lowercase
- Adds "s" for pluralization (simple:
UserSchema→users)
# Automatic naming
users_table = UserSchema.to_sqlalchemy() # Table name: "users"
# Custom naming
users_table = UserSchema.to_sqlalchemy(table_name="app_users")
Metadata Management¶
You can use a shared MetaData instance to manage multiple tables: