From 4fea780eed05a3238dba5ad01ac08defacaf25a1 Mon Sep 17 00:00:00 2001 From: Carlos Serrano Date: Mon, 16 Mar 2026 15:14:53 +0100 Subject: [PATCH 1/3] Register missing SQL Server types for sysname in engine dialect --- src/sqlacodegen/cli.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/sqlacodegen/cli.py b/src/sqlacodegen/cli.py index 8f37373f..f7df9a97 100644 --- a/src/sqlacodegen/cli.py +++ b/src/sqlacodegen/cli.py @@ -112,6 +112,13 @@ 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 + + engine.dialect.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] From 34fedde0a61ea36c76a680b908b6938a759ae3f8 Mon Sep 17 00:00:00 2001 From: Carlos Serrano Date: Mon, 16 Mar 2026 15:17:21 +0100 Subject: [PATCH 2/3] Fix SQL Server schema reflection for sysname type by registering it as NVARCHAR in MSSQL dialect --- CHANGES.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 677542e8..b423276f 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 From 7a12e7fc7eebea894d6c34fdef4f824fc5273389 Mon Sep 17 00:00:00 2001 From: Carlos Serrano Date: Mon, 16 Mar 2026 15:20:13 +0100 Subject: [PATCH 3/3] Fix MSSQL sysname type registration in engine dialect reflection --- src/sqlacodegen/cli.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/sqlacodegen/cli.py b/src/sqlacodegen/cli.py index f7df9a97..8d746162 100644 --- a/src/sqlacodegen/cli.py +++ b/src/sqlacodegen/cli.py @@ -117,7 +117,11 @@ def main() -> None: if engine.dialect.name == "mssql": from sqlalchemy.sql.sqltypes import NVARCHAR - engine.dialect.ischema_names.setdefault("sysname", 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