繁体   English   中英

仅使用 Python 从 DynamoDB 获取新数据

[英]Only get new data from DynamoDB using Python

我正在尝试使用 Python 从 DynamoDB 事务表中导出数据。 到目前为止,我能够从表中获取所有数据,但我想添加一个过滤器,允许我只获取从某个日期到今天的数据。

有一个名为CreatedAt的字段表示进行交易的时间,我正在考虑使用该字段来过滤新数据。

这是我一直用来查询表的代码,如果有人能告诉我如何将此过滤器应用到此脚本中,那将非常有帮助。

import pandas as pd
from boto3.dynamodb.conditions

aws_access_key_id = '*****'
aws_secret_access_key = '*****'
region='****'

dynamodb = boto3.resource(
    'dynamodb',
    aws_access_key_id=aws_access_key_id,
    aws_secret_access_key=aws_secret_access_key,
    region_name=region
    )

transactions_table = dynamodb.Table('transactions_table')

result = transactions_table.scan()

items = result['Items']

df_transactions_table  = pd.json_normalize(items)

print(df_transactions_table)

谢谢!

Boto3 允许将 FilterExpressions 作为 DynamoDB 查询的一部分,以实现对字段的过滤。 这里

可选地使用 FilterExpressions 仍将消耗相同数量的读取容量单位。

您需要使用如下所示的FilterExpression

import boto3
from boto3.dynamodb.conditions import Key, Attr, And


aws_access_key_id = '*****'
aws_secret_access_key = '*****'
region='****'

dynamodb = boto3.resource(
    'dynamodb',
    aws_access_key_id=aws_access_key_id,
    aws_secret_access_key=aws_secret_access_key,
    region_name=region
    )

transactions_table = dynamodb.Table('transactions_table')

result = transactions_table.scan(
    FilterExpression=Attr('CreatedAt').gt('2020-08-10'),
)

items = result['Items']

df_transactions_table  = pd.json_normalize(items)

print(df_transactions_table)

您可以从有关Boto3 ScanFilterExpression的文档中了解更多信息。

一些建议:请不要像在此代码中那样对密钥进行硬编码,请使用 IAM 角色。 如果您在本地进行测试,请配置 AWS CLI,它将提供您在测试时可以使用的凭证,这样您就不会出错并在 GitHub 等上共享密钥...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM