我面临将table的主键列定义为Numeric(18,0)的问题。我正在连接到MSSQL,并且在数据库中所有表都被定义为主键的数字(18,0)。 因此,为了与数据库表模式匹配,我将Sqlalchemy表更新为Numeric(18,0),但是当表具有插入触发器时,我面临问题。 例如
sometable = Table("sometable",
metadata,
Column("sometable_id",Numeric(18,0), primary_key=True))
所以我浏览了文档,发现我需要关闭implicit_returning = False并且可选地需要自动增加primary_key,所以我将模式更改为下面。
sometable = Table("sometable",
metadata,
Column("sometable_id", Numeric(18,0), autoincrement=True,primary_key=True),
implicit_returning=False)
但它仍然会引发波纹错误 {FlushError:实例具有NULL标识密钥。如果是这样的话 自动生成的值,检查数据库表是否允许生成新的主键 值,并且映射的Column对象配置为期望这些生成的值。 确保此flush()没有在不适当的时间发生,例如在load()内 事件。 }
问题发生后,我发现自动增量是问题,我继续将表模式更改为主键的数据类型为BigInteger。
sometable = Table("sometable",
metadata,
Column("sometable_id", BigInteger, autoincrement=True,primary_key=True),
implicit_returning=False)
它适用于所有情况,包括插入触发器。 所以我的问题是在我的场景中应该是主键的首选数据类型。 我是否继续使用BigInteger。 需要建议的人。