使用boto3和dynamodb扫描查找2个日期之间的项目

Neu*_*ter 4 python-3.x aws-sdk boto3

我正在将NodeJS后端移至Python3.6。

在NodeJS中,我能够使用aws SDK来获取两个日期之间的项目,如下所示:

```

var now = moment().tz("Pacific/Auckland").format()
var yesterday = moment().add(-24,"Hours").tz("Pacific/Auckland").format()
var docClient = new AWS.DynamoDB.DocumentClient();
  var params = {
    TableName : process.env.TableName,
    FilterExpression : '#ts between :val1 and :val2',
    ExpressionAttributeNames: {
        "#ts": "timeStamp",
    },
    ExpressionAttributeValues: {
      ':val1': yesterday,
      ':val2': now
    }
  }
Run Code Online (Sandbox Code Playgroud)

```

这样做很好,但是boto3中的between函数似乎并没有做同样的事情。

这是我正在尝试获得类似结果的当前代码:

```

import boto3
import time
from datetime import datetime, timedelta
from boto3.dynamodb.conditions import Key, Attr

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('table_name')

now = int(datetime.timestamp(datetime.now()))
three_hours_ago =  int(datetime.timestamp(datetime.now() - timedelta(hours=3)))

fe = Key('timeStamp').between(three_hours_ago,now);
response = table.scan(
                FilterExpression=fe
            )
print(response)
Run Code Online (Sandbox Code Playgroud)

```

这不会返回任何项目,我确定在这两个日期之间有项目。

任何帮助将非常感激。

Neu*_*ter 7

我设法使用以下代码解决了这个问题:

now             = datetime.datetime.now()
three_hours_ago = now - datetime.timedelta(hours=3)
#  TODO make the db UTC 
now             = now.strftime('%FT%T+13:00')
three_hours_ago = three_hours_ago.strftime('%FT%T+13:00')

fe       = Key('timeStamp').between(three_hours_ago,now);
response = table.scan(
                FilterExpression=fe
            )
Run Code Online (Sandbox Code Playgroud)