首页 > 解决方案 > 使用 boto3 将枚举类型插入 aurora postgres

问题描述

我有一个模式,它有一个字符串和枚举,我正在尝试使用 boto3 写入。我创建一个 sql,指定参数并运行 execute_statement。字符串和日期足够简单:

    sql = """
          insert into scrape_results(lname,fname, dob) values (:lname, :fname, :dob)
          """              
    param1 = {'name':'lname', 'value':{'stringValue': 'xx'}}
    param3 = {'name':'dob', 'typeHint': 'DATE', 'value':{'stringValue': '1970-01-01'}}
    param_set = [param1, param2]     
    response = rds_data.execute_statement(
        resourceArn = cluster_arn, 
        secretArn = secret_arn, 
        database = 'db', 
        sql = sql,
        parameters = param_set)

我拥有的第三个字段是一个枚举。我不遵循如何插入枚举。enum 没有 typeHint,boto 不接受 stringValue。我试过这个:(court_type是枚举)

param3 = {'name':'court',  'value':{'stringValue': 'court'}}
An error occurred (BadRequestException) when calling the ExecuteStatement operation: 
ERROR: operator does not exist: court_type = character varying

Hint: No operator matches the given name and argument type(s). 
You might need to add explicit type casts

标签: postgresqlboto3amazon-aurora

解决方案


我求助于这个来解决它:

sql_statement = f"""
    INSERT INTO
        s_info(jurisdiction, court, us_state)
    VALUES(
        '{req.jurisdiction}',
        '{req.court_type}', #enum
        '{req.state}'
    )
    ON CONFLICT DO NOTHING
"""

rds_data = boto3.client('rds-data', region_name='xxx')
try:
    response = rds_data.execute_statement(
        resourceArn=CLUSTER_ARN,
        secretArn=SECRET_ARN,
        database=DATABASE,
        sql=sql_statement
        )
except ClientError as exc:
    #print(f"failed to execute {sql_statement} because {exc}")
    raise

推荐阅读