diff --git a/CHANGES.rst b/CHANGES.rst index 677542e..b423276 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,6 +1,12 @@ Version history =============== +**UNRELEASED** + +- Fix SQL Server schema reflection failing when encountering the ``sysname`` type + by registering it as ``NVARCHAR`` in the MSSQL dialect before reflection + (PR by @NotCarlosSerrano) + **4.0.2** - Fixed rendering of inherited keyword arguments for dialect-specific types that use diff --git a/src/sqlacodegen/cli.py b/src/sqlacodegen/cli.py index 8f37373..8d74616 100644 --- a/src/sqlacodegen/cli.py +++ b/src/sqlacodegen/cli.py @@ -112,6 +112,17 @@ def main() -> None: # Use reflection to fill in the metadata engine_args = _parse_engine_args(args.engine_arg) engine = create_engine(args.url, **engine_args) + + # Register missing SQL Server types + if engine.dialect.name == "mssql": + from sqlalchemy.sql.sqltypes import NVARCHAR + + ischema_names: dict[str, type] | None = getattr( + engine.dialect, "ischema_names", None + ) + if ischema_names is not None: + ischema_names.setdefault("sysname", NVARCHAR) + metadata = MetaData() tables = args.tables.split(",") if args.tables else None schemas = args.schemas.split(",") if args.schemas else [None]