pymssql访问sqlserver的一个bug

本文介绍在使用Python的pymssql库操作SqlServer数据库时遇到的问题:在一个事务中,自动生成的外键值不能以SQL参数形式插入。文章提供了一种解决方案,并探讨了可能的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  对数据库进行多表操作,如果表与表之间存在依赖,那么显式的使用事务,可以保持对数据库操作的原子性。用Python访问SqlServer数据库,我使用pymssql库。今天在使用这个库的时候,发现一个问题。

问题大概是这样的:

  我有两张表,一张主表(ClassInfo),一张从表(Student),Student表通过外键ClassID与ClassInfo表进行关联。这两张表的主键都是自增型的int型字段。

 

数据表

  创建表的SQL语句如下:

  在代码中,先创建一个班级,然后在班级中插入学生数据。如果这两个操作在一个事务中完成,一般情况下,按照pymssql提供的文档,我们会写这样的语句来实现:

  但是很遗憾,在运行代码的时候,出错了:

错误

  如果我把上面的操作分成两个独立的事务来实现,发现是没有问题的。

 

  经过一下午地摸索,终算找到一个解决办法,就是把自增的ID以拼字符串的形式添加到SQL语句里,而不是以SQL参数的形式。

 

  我不知道这算不算是pymssql的一个bug:在一个事务中,对于自动生成的外键值,不能以SQL参数的形式插入数据库。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值