如何在 python 中为 aws dynamodb 创建内容对象?
How to create constent object for aws dynamodb in python?
我想知道如何检查 boto3 客户端对象是否已经实例化。我有以下用于为 aws dynamodb
创建对象的代码
import boto3
def aws_dynamodb():
return boto3.resource("dynamodb")
def get_db_con():
dynamo_conn=aws_dynamodb()
return dynamo_conn
现在上面'get_db_con()' return连接到dynamodb。但我想确保 'get_db_con' 不会在每次被调用时从 'aws_dynamodb()' 创建客户端对象。
例如:
def aws_db_table(table):
con=get_db_con()
return con.table(table)
account_table=aws_db_table("my_ac_table")
audit_table=aws_db_table("audit_table")
所以每当我调用 'aws_db_table' 时,它不应该每次都为 'aws_dynamodb()' 创建客户端。
所以如果 aws_dynamodb() 已经实例化或没有创建新的客户端对象,我如何检查它。因为每次创建客户端对象的成本很高..
注意:我想运行 Lambda 函数中的代码
请在这方面帮助我们..
谢谢
我通常会使用一个看起来像这样的全局变量的低技术解决方案:
import boto3
# Underscore-prefix to indicate this is something private
_TABLE_RESOURCE = None
def get_table_resource():
global _TABLE_RESOURCE
if _TABLE_RESOURCE is None:
_TABLE_RESOURCE = boto3.resource("dynamodb").Table("my_table")
return _TABLE_RESOURCE
def handler(event, context):
table = get_table_resource()
# ...
全局变量在 Lambda 执行过程中保持不变,这就是它起作用的原因。
另一种选择是使用 functools 中的 lru_cache,它使用记忆。
from functools import lru_cache
import boto3
@lru_cache(maxsize=128)
def get_table_resource():
return boto3.resource("dynamodb").Table("my_table")
def handler(event, context):
table = get_table_resource()
# ...
对于那些不熟悉记忆的人来说,第一个解决方案可能更容易阅读和理解。
(注:代码是凭记忆写的,可能有bug)
我想知道如何检查 boto3 客户端对象是否已经实例化。我有以下用于为 aws dynamodb
创建对象的代码import boto3
def aws_dynamodb():
return boto3.resource("dynamodb")
def get_db_con():
dynamo_conn=aws_dynamodb()
return dynamo_conn
现在上面'get_db_con()' return连接到dynamodb。但我想确保 'get_db_con' 不会在每次被调用时从 'aws_dynamodb()' 创建客户端对象。
例如:
def aws_db_table(table):
con=get_db_con()
return con.table(table)
account_table=aws_db_table("my_ac_table")
audit_table=aws_db_table("audit_table")
所以每当我调用 'aws_db_table' 时,它不应该每次都为 'aws_dynamodb()' 创建客户端。
所以如果 aws_dynamodb() 已经实例化或没有创建新的客户端对象,我如何检查它。因为每次创建客户端对象的成本很高..
注意:我想运行 Lambda 函数中的代码
请在这方面帮助我们..
谢谢
我通常会使用一个看起来像这样的全局变量的低技术解决方案:
import boto3
# Underscore-prefix to indicate this is something private
_TABLE_RESOURCE = None
def get_table_resource():
global _TABLE_RESOURCE
if _TABLE_RESOURCE is None:
_TABLE_RESOURCE = boto3.resource("dynamodb").Table("my_table")
return _TABLE_RESOURCE
def handler(event, context):
table = get_table_resource()
# ...
全局变量在 Lambda 执行过程中保持不变,这就是它起作用的原因。
另一种选择是使用 functools 中的 lru_cache,它使用记忆。
from functools import lru_cache
import boto3
@lru_cache(maxsize=128)
def get_table_resource():
return boto3.resource("dynamodb").Table("my_table")
def handler(event, context):
table = get_table_resource()
# ...
对于那些不熟悉记忆的人来说,第一个解决方案可能更容易阅读和理解。 (注:代码是凭记忆写的,可能有bug)