在Python中,当列表太大时,将SQL Where IN子句拆分为较小的请求



我用python设置了一个AWS Lambda函数,以接收CSV的请求,然后根据该请求查询AWS Serverless Aurora PostgreSQL数据库。当请求小于1K时,该函数会工作,但由于数据API中的硬限制,我会出现错误。我正试图找到一种方法,一旦达到这个限制,就可以将查询分解成更小的查询,但不确定如何在python中做到这一点。有人能建议一种方法将请求分解成更小的块,这样我就不会达到API的数据限制吗?

使用的代码段:

#Set Database connection params
engine = wr.data_api.rds.connect( resource_arn = resource_arn, database=database_name, secret_arn=secret_arn)
#read in s3 csv and select ids
read_df = wr.s3.read_csv(path=s3_path_in)
requested_ids = read_df["ids"]
in_ID = requested_ids.tolist()
in_query= str(tuple(in_ID))
#query postgres
query_id = """
select c.*
from table1 b
INNER JOIN table2 c on b.id = c.id
where b.id in %s
""" % in_query
out_ids = wr.data_api.rds.read_sql_query(query_id, engine) 

我能想到的一种方法是使用postgres SQL的LIMIT <row_count>子句并将row_count动态传递给查询。

select c.*
from table1 b
INNER JOIN table2 c on b.id = c.id
where b.id in <>
order by <primary_key>
limit 999

PostgreSQL限制

相关内容

  • 没有找到相关文章

最新更新