Flask-SQLAlchemy插入SQL Server表触发不必要SET操作报错如何解决?
问题原因
SQLAlchemy针对整型主键字段有默认行为:只要字段被标记为primary_key=True且类型为整型,就会默认判定该字段为自增列,对应SQL Server的IDENTITY属性。当你显式为该字段赋值并执行插入操作时,SQLAlchemy会自动执行SET IDENTITY_INSERT [表名] ON语句,用于允许显式插入自增列的值。但你的建表语句中id字段没有设置IDENTITY自增属性,因此SQL Server会返回该表没有IDENTITY属性无法执行SET操作的报错。
解决方案
只需要在Resale模型的id字段定义中,显式添加autoincrement=False参数,关闭SQLAlchemy对该字段的自增默认判定即可。修改后的模型代码如下:
class Resale(db.Model): __tablename__ = 'Resale' address = db.Column(db.String(100), nullable=False) # 新增autoincrement=False参数,关闭自增默认判定 id = db.Column(db.BigInteger, primary_key=True, autoincrement=False) price = db.Column(db.Integer, nullable=False) # 补充小提示:此处default不要加括号,否则会取服务启动时间而非插入时的当前时间 start_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
内容的提问来源于stack exchange,提问作者kilag
相关产品推荐
相关产品推荐

