You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python向DynamoDB表插入数据?遇pickle线程锁错误求助

解决DynamoDB插入时的"cannot pickle '_thread.lock' object"错误

错误原因

你的代码里put_item方法的TableName参数传错了值:你传入的是boto3的Table对象(table = database.Table("Email_Service")),而该参数需要的是字符串类型的表名。当尝试序列化这个Table对象时,因为它包含线程锁(_thread.lock)这类不可pickle的对象,所以抛出了错误。

修复步骤

直接修改put_item的调用代码,有两种可选方式:

方式1:移除冗余的TableName参数

因为你已经通过database.Table("Email_Service")获取了表实例,调用put_item时无需再指定表名:

table.put_item(
    Item=message
)

方式2:将TableName参数改为字符串表名

如果你坚持要指定TableName,传入字符串而非Table对象:

table.put_item(
    TableName="Email_Service",
    Item=message
)

额外检查点

  • 确认receive_from_queue()返回的message确实是符合DynamoDB要求的字典格式(和你提供的示例结构一致),没有包含任何不可序列化的对象(比如线程、连接实例等)。
  • 确保SORT_KEY和PARTITION_KEY是已定义的字符串常量,对应表的实际分区键和排序键名称。

内容的提问来源于stack exchange,提问作者Tyche

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 10:10:34