我正在使用Microsoft SQL Server,带有Django 2.0.1的SQL Server ODBC驱动程序13
这实际上是在我所有的十进制字段中发生的,我希望我缺少一些简单的东西。
我已经在模型中声明了
Overhead = models.DecimalField(max_digits=6, decimal_places=4, db_column='overhead')
使用它制作一个模型表单,它实际上验证位数是否太多(例如:100.0000),并且如果设置为小于声明数量的数字(例如:9.0000),则可以正确更新。匹配max_digits的任意位数都会产生截断错误:
String data, right truncation: length 14 buffer 12
如果我用声明的DecimalField重复相同的情况:
models.DecimalField(max_digits=9, decimal_places=2, db_column='subtotal')
我从数据库驱动程序(22001)中得到了相同的错误类型,并且溢出量略有不同:
String data, right truncation: length 26 buffer 24
为日志中的update语句生成的SQL可以复制/粘贴,并且在SQL Server的SQL编辑器中具有完全相同的参数,并且可以愉快地更新记录。我一直认为,当Django编译SQL和执行它的数据库驱动程序之间发生了某些事情,但是我不确定我要寻找的是什么,因此可以提供任何帮助。
答案 0 :(得分:1)
按照Gord Thompson的评论,将pyodbc升级到4.0.23解决了该问题。