Adapters

This module provides integrations with popular Python frameworks.

SQLAlchemy Adapter

SQLAlchemy integration for sqlmeta.

This module provides functions to convert between sqlmeta objects and SQLAlchemy Table objects.

Example

>>> from sqlmeta import Table, SqlColumn
>>> from sqlmeta.adapters.sqlalchemy import to_sqlalchemy
>>> from sqlalchemy import MetaData
>>>
>>> table = Table("users", columns=[...])
>>> metadata = MetaData()
>>> sa_table = to_sqlalchemy(table, metadata)
sqlmeta.adapters.sqlalchemy.to_sqlalchemy(table: Table, metadata: MetaData | None = None) Table[source]

Convert sqlmeta Table to SQLAlchemy Table.

Parameters:
  • table – sqlmeta Table object

  • metadata – SQLAlchemy MetaData instance (optional)

Returns:

SQLAlchemy Table object

Example

>>> from sqlmeta import Table, SqlColumn
>>> from sqlalchemy import MetaData
>>>
>>> table = Table("users", columns=[
...     SqlColumn("id", "INTEGER", is_primary_key=True),
...     SqlColumn("email", "VARCHAR(255)", is_nullable=False),
... ])
>>>
>>> metadata = MetaData()
>>> sa_table = to_sqlalchemy(table, metadata)
sqlmeta.adapters.sqlalchemy.from_sqlalchemy(sa_table: Table) Table[source]

Convert SQLAlchemy Table to sqlmeta Table.

Parameters:

sa_table – SQLAlchemy Table object

Returns:

sqlmeta Table object

sqlmeta.adapters.sqlalchemy.get_create_ddl(table: Table, dialect: str = 'postgresql') str[source]

Get CREATE TABLE DDL for a sqlmeta Table.

Parameters:
  • table – sqlmeta Table object

  • dialect – SQL dialect name

Returns:

CREATE TABLE DDL string

Pydantic Adapter

Pydantic integration for sqlmeta.

This module provides functions to convert sqlmeta Table objects to Pydantic BaseModel classes.

Example

>>> from sqlmeta import Table, SqlColumn
>>> from sqlmeta.adapters.pydantic import to_pydantic
>>>
>>> table = Table("users", columns=[...])
>>> UserModel = to_pydantic(table)
>>> user = UserModel(id=1, email="test@example.com")
sqlmeta.adapters.pydantic.to_pydantic(table: Table, model_name: str | None = None, use_title_case: bool = True) Type[BaseModel][source]

Convert sqlmeta Table to Pydantic BaseModel.

Parameters:
  • table – sqlmeta Table object

  • model_name – Model name (defaults to table name in PascalCase)

  • use_title_case – Convert snake_case to PascalCase

Returns:

Pydantic BaseModel class

Example

>>> from sqlmeta import Table, SqlColumn
>>>
>>> table = Table("users", columns=[
...     SqlColumn("id", "INTEGER", is_primary_key=True),
...     SqlColumn("email", "VARCHAR(255)", is_nullable=False),
...     SqlColumn("name", "VARCHAR(100)"),
... ])
>>>
>>> UserModel = to_pydantic(table)
>>> user = UserModel(id=1, email="test@example.com", name="John")
>>> print(user.model_dump_json())
sqlmeta.adapters.pydantic.to_pydantic_schema(table: Table) Dict[str, Any][source]

Convert sqlmeta Table to Pydantic JSON Schema.

Parameters:

table – sqlmeta Table object

Returns:

JSON Schema dictionary

Alembic Adapter

Alembic integration for sqlmeta.

This module provides functions to integrate sqlmeta with Alembic for database migrations. It enables comparing sqlmeta schemas with database schemas and generating Alembic operations.

Example

>>> from sqlmeta import Table, SqlColumn
>>> from sqlmeta.adapters.alembic import generate_operations
>>> from alembic.operations import Operations
>>>
>>> source_table = Table("users", columns=[...])
>>> target_table = Table("users", columns=[...])
>>> operations = generate_operations(source_table, target_table)
sqlmeta.adapters.alembic.to_alembic_table(table: Table) CreateTableOp[source]

Convert sqlmeta Table to Alembic CreateTableOp.

Parameters:

table – sqlmeta Table object

Returns:

Alembic CreateTableOp object

Example

>>> from sqlmeta import Table, SqlColumn
>>>
>>> table = Table("users", columns=[
...     SqlColumn("id", "INTEGER", is_primary_key=True),
...     SqlColumn("email", "VARCHAR(255)", is_nullable=False),
... ])
>>>
>>> create_op = to_alembic_table(table)
sqlmeta.adapters.alembic.generate_operations(source_table: Table | None, target_table: Table | None, dialect: str | None = None) List[source]

Generate Alembic operations from table comparison.

Compares two table definitions and generates the necessary Alembic operations to migrate from source to target.

Parameters:
  • source_table – Current table definition (None if table doesn’t exist)

  • target_table – Desired table definition (None if dropping table)

  • dialect – SQL dialect for comparison

Returns:

List of Alembic operation objects

Example

>>> source = Table("users", columns=[
...     SqlColumn("id", "INTEGER", is_primary_key=True),
...     SqlColumn("name", "VARCHAR(100)"),
... ])
>>> target = Table("users", columns=[
...     SqlColumn("id", "INTEGER", is_primary_key=True),
...     SqlColumn("name", "VARCHAR(100)"),
...     SqlColumn("email", "VARCHAR(255)", is_nullable=False),
... ])
>>> ops = generate_operations(source, target, dialect="postgresql")
>>> # Results in: [AddColumnOp(...)]
sqlmeta.adapters.alembic.generate_migration_script(source_tables: List[Table], target_tables: List[Table], dialect: str | None = None, message: str = 'Auto-generated migration') str[source]

Generate a complete Alembic migration script.

Compares two sets of tables and generates a complete migration script with upgrade() and downgrade() functions.

Parameters:
  • source_tables – Current schema tables

  • target_tables – Desired schema tables

  • dialect – SQL dialect for comparison

  • message – Migration message/description

Returns:

String containing the migration script

Example

>>> source = [Table("users", ...)]
>>> target = [Table("users", ...), Table("posts", ...)]
>>> script = generate_migration_script(source, target, "postgresql")
>>> print(script)