我正在查询API,将其存储到pandas数据框,对其进行转换,然后将其写入AWS Redshift数据库。在我的本地计算机上没有问题,一切正常。当我将代码与所有必需的软件包放在AWS Lambda中时,出现此错误:
Calling the invoke API action failed with this message: Network Error
我已经读到它可能是由于它可以向数据库写入多少行的限制,所以我尝试仅向数据库写入1行,但仍然出现相同的错误。
我写的代码如下:
conn = create_engine('postgresql://user:password@redshifteu-west-1.redshift.amazonaws.com:5439/dev')
result.to_sql('table_1', conn, index=False, if_exists='replace', schema='schema')
我正在使用熊猫to_sql
方法和sqlalchemy
。如何使用AWS Lambda将数据框写入Redshift数据库?
答案 0 :(得分:1)
请注意,您可能需要psycopg2
才能通过SQLAlchemy连接到Redshift:
pip install psycopg2
现在,另一种可能性是您实际上超出了速率limit of S3。
如果上述方法无效,并且您确信未超出速率限制,则可以尝试pandas_redshift
:
# pip install pandas-redshift
import pandas_redshift as pr
pr.connect_to_redshift(
dbname='dev', host='redshifteu-west-1.redshift.amazonaws.com',
port=5439, user='user', password='password'
)
pr.connect_to_s3(
aws_access_key_id='aws_access_key_id',
aws_secret_access_key='aws_secret_access_key',
bucket='bucket_name',
subdirectory='subdirectory'
)
pr.pandas_to_redshift(data_frame=result, redshift_table_name='table_1')