已解决sqlalchemy.exc.OperationalError: (pymssql.OperationalError) (1946, b“Operation failed. The index

已解决(pandas+sqlalchemy向数据库插入数据失败)sqlalchemy.exc.OperationalError: (pymssql.OperationalError) (1946, b"Operation failed. The index entry of length 930 bytes for the index ‘index_words’ exceeds the maximum length of 900 bytes.DB-Lib error message 20018, severity 16:\nGeneral SQL Server error: Check messages from the SQL Server\n")






文章目录

  • 报错代码
  • 报错翻译
  • 报错原因
  • 解决方法
  • 帮忙解决





报错代码



粉丝群一个小伙伴想用pandas+sqlalchemy向数据库插入数据,但是还是发生了报错(当时他心里瞬间凉了一大截,跑来找我求助,然后顺利帮助他解决了,顺便记录一下希望可以帮助到更多遇到这个bug不会解决的小伙伴),报错代码如下:

df = pd.DataFrame(data_list)
engine = sqlalchemy.create_engine('mssql+pymssql://账号:密码@服务器地址:端口号/数据表')
if len(df) - 1 < 2000:
     df.to_sql("数据表", con=engine, if_exists="append", index=False, chunksize=10000)


报错信息如下

sqlalchemy.exc.OperationalError: (pymssql.OperationalError) (1946, b"Operation failed. The index entry of length 930 bytes for the index ‘index_words’ exceeds the maximum length of 900 bytes.DB-Lib error message 20018, severity 16:\nGeneral SQL Server error: Check messages from the SQL Server\n")



报错翻译



报错信息翻译

sqlalchemy.exc.OperationalError:(pymssql.Operational error)(1946,b“操作失败。索引’index_words’的长度为930字节的索引项超过了900字节的最大长度。DB-Lib错误消息20018,严重性16:\n常规SQL Server错误:检查来自SQL Server的消息\n”)





报错原因



组合索引值允许的最大大小为 900 字节。也就是说,组成组合索引的固定大小列的总长度不得超过 900 字节。

索引键允许的最大大小为 900 字节,不过 SQL Server 2000 允许在可能包含大量可变类型列的列上创建索引,而这些列的最大大小超过 900 字节。

在创建索引时,SQL Server 检查下列条件:

所有参与索引定义的固定数据列的总长度必须小于或等于 900 字节。当所要创建的索引只由固定数据列构成时,固定数据列的总计大小必须小于或等于 900 字节。否则将不能创建索引,且 SQL Server 将返回错误。

如果索引定义由固定类型列和可变类型列组成,且固定数据列满足前面的条件(小于或等于 900 字节),则 SQL Server 仍要检查可变类型列的总大小。如果可变类型列的最大大小与固定数据列大小的和大于 900 字节,则 SQL Server 将创建索引,不过将给用户返回警告消息以提醒用户:如果随后在可变类型列上的插入或更新操作导致总大小超过 900 字节,则操作将失败且用户将收到运行时错误。



解决方法



解决方法1:删除较大字段


解决方法2:索引定义只由可变类型列组成,且这些列的最大总大小大于 900 字节,则 SQL Server 将创建索引,不过将返回警告消息


帮忙解决

本文已收录于:《告别Bug》专栏

本专栏用于记录学习和工作中遇到的各种疑难Bug问题,以及粉丝群里小伙伴提出的各种问题,文章形式:报错代码 + 报错翻译 + 报错原因 + 解决方法,包括程序安装、运行程序过程中等等问题,订阅专栏+关注博主后如遇到其他问题可私聊帮忙解决!!!

你可能感兴趣的:(《告别Bug》,数据库,python,pandas)