Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python DynamoDb存储的对象重复_Python_Amazon Web Services_Amazon Dynamodb - Fatal编程技术网

Python DynamoDb存储的对象重复

Python DynamoDb存储的对象重复,python,amazon-web-services,amazon-dynamodb,Python,Amazon Web Services,Amazon Dynamodb,我编写这个函数是为了查看对象是否已经存储在dynamo中 def doesIDExist(key): print(key) info=key.split("/") #set properties try: id=info[1]+info[2] results = dynamoConn.query(swfTable,id) if results is not None: return True

我编写这个函数是为了查看对象是否已经存储在dynamo中

def doesIDExist(key):
    print(key)
    info=key.split("/")
    #set properties
    try:
        id=info[1]+info[2]
        results = dynamoConn.query(swfTable,id)
        if results is not None:
            return True
    except:
        return False
    return False
在写入任何db之前,我调用支票:

 if(dynamoStorage.doesIDExist(theNewKey)==False):

      data= recursiveInnerFile(fPath,theNewKey)
      images = data[0]
      text = data[1]
      dynamoStorage.createSwfInDynamo(theNewKey,images,text)
但我仍然有重复出现。我错过了什么

编辑:

我没有收到错误: 我得到一个table对象,我的函数返回True。但什么都没有添加

第二次编辑:
我在下面解决了这个问题。

为了避免重复,最好的方法是使用“有条件放置”,这样,如果已经存在具有密钥的项,新项将不会覆盖该现有项

请参阅有关python的详细信息

创建新项目或用新项目替换旧项目(包括 所有属性)。如果指定的表中已存在具有 相同的主键,新项将完全替换旧项 项目。您可以通过指定预期的 规则

您只需要将“预期”作为字典传递给put\u项调用

expected={
    'yourHashKeyName': {'Exists': False}
}
上面的代码无法工作的原因是dynamoConn.query将始终返回TableGenerator对象,即使没有具有该哈希键的项

查询函数接受一个值,该值返回“查询操作的项目总数,即使该操作没有与分配的筛选器匹配的项目。”

然后检查

results.count > 0
如果该id已存在,则results.count应为1。否则应该是0


另一个选项是使用get_item API。您的表没有范围键,您可以使用“id”作为hashkey调用get\u项

我解决了这个问题。问题是返回的对象不是表。我需要用.table获取表格,然后获取count.item\u count

def doesIDExist(key):
    print(key)
    info=key.split("/")
    #set properties
    #try:
    id=info[1]+info[2]
    results = dynamoConn.query(swfTable,id).table.item_count
    print results
    if results > 0:
        return True
    #except:
    #    return False
    return False

我担心的是,数据在技术上不同于不同的日期,但我希望它不会基于id覆盖。您能进一步解释条件put吗?它是否只在基于ID的情况下工作,还是需要完全相同?如果一个条件put通过并改变了文件,那么我将丢失表中指向s3文件的部分。唯一性仅由ID决定。以上解决方案都不需要您的数据作为输入。啊,好的,谢谢。事实上,我发现我的代码出了什么问题。但这也行得通。我不太确定这在我的情况下是否真的行得通。我需要看看它是否存在,这样我就可以放其他东西了。如果创建了这个,我将在另一个表中创建相关的其他内容。条件put是否返回布尔值?
def doesIDExist(key):
    print(key)
    info=key.split("/")
    #set properties
    #try:
    id=info[1]+info[2]
    results = dynamoConn.query(swfTable,id).table.item_count
    print results
    if results > 0:
        return True
    #except:
    #    return False
    return False