SuperAPI AI 工具集

sqlalchemy-azure-sql

数据与分析

查看项目

更新于 10-16 00:31

技能介绍

用途:说明 SQLAlchemy 通过 mssql 方言连接 Azure SQL Database 时的特有行为。该方言会在 INSERT 中追加 OUTPUT 子句以获取服务端生成的主键,而 Azure SQL Database 在目标表存在已启用触发器时拒绝无 INTO 的 OUTPUT 子句,报 Msg 334。

主要能力:资料给出引擎 URL 构造方式(URL.create 配合 mssql+pyodbc、ODBC Driver 18 for SQL Server、pool_pre_ping),并说明用编译语句观察方言实际生成的 SQL。关键开关是每表的 implicit_returning=False(写在 table_args 或传给 Core 的 Table),关闭后改用 scope_identity() 取键,可绕过触发器限制;引擎级参数已被弃用且不影响生成的 SQL,且该开关不覆盖显式 returning()。

使用方式:fast_executemany 自 1.3 起存在,但 2.0 引入 insertmanyvalues 后其效果取决于 INSERT 是否携带 returning 子句;可用一行命令核对 sqlalchemy.version 与 mssql.dialect().use_insertmanyvalues(2.0.8 True、2.0.9 False、2.0.10 True)。类型映射方面,String 生成 VARCHAR 而非 Unicode,建议显式用 Unicode 或 NVARCHAR;离线编译时 deprecate_large_types 为 None,Text 会编译成 TEXT/NTEXT,与首次连接后的实际结果不同。Alembic 同样受上述影响,可用 alembic upgrade head --sql 先输出 SQL 检查,alter_column 改可空性需 existing_type,drop_index 需 table_name,drop_column 遇默认值、CHECK 或单一外键约束时需 mssql_drop_* 参数。

适用场景与限制:适用于已有含审计/历史触发器表的 ORM 映射、批量插入调优与迁移审查。资料强调不要内联凭据、不要把产品称为 mssql、不要断言 fast_executemany 加速了带 returning 的 ORM 批量插入;版本与错误号基于 SQLAlchemy 2.0.52、pyodbc 5.3.0 及 2026-09-03 的实测。官方支持驱动与 Entra ID 认证等细节未在本文展开。