我要连接到S3存储桶,获取csv文件并将行复制到RDS DB。在这个脚本上我们使用arcpy,我不熟悉这个包,我只是想直接从S3存储桶获取csv文件作为源而不在服务器上下载它。代码如下:
infdig
错误:在CopyRows arcgisscripting.ExecuteError中。执行失败参数无效
如果我们使用服务器上的路径作为源路径,如下所示,它可以正常工作:
import arcpy
from boto.s3.key import Key
import StringIO
import pandas as pd
import boto
import boto.s3.connection
access_key = ''
secret_key = ''
conn = boto.connect_s3(aws_access_key_id = access_key,aws_secret_access_key = secret_key,host = 's3.amazonaws.com')
b = conn.get_bucket('mybucket')
#for key in b.list:
b_key = b.get_key('file1.csv')
arcpy.env.overwriteOutput = True
b_url = b_key.generate_url(0, query_auth=False, force_http=True)
print b_url
##Read file
k = Key(b,file1.csv)
content = k.get_contents_as_string()
sourcefile_csv = pd.read_csv(StringIO.StringIO(content))
##CopyRows_management (in_rows, out_table, {config_keyword})
#http://pro.arcgis.com/en/pro-app/tool-reference/data-management/copy-rows.htm
arcpy.CopyRows_management(sourcefile_csv, "RDSTablePath", "")
print("copy rows done")
任何帮助都将不胜感激。
答案 0 :(得分:0)
看起来您正在尝试使用Pandas数据框作为表来使用CopyRows_management进行读取?我不认为这是函数的有效输入,因此"参数无效"错误。 documentation表示in_rows应为"要复制的要素类,图层,表或表视图中的行。"我认为无论如何都不需要使用大熊猫。
所以要么将csv保存在脚本可以访问它的地方(就像你在服务器上使用路径时所做的那样),或者,如果你不想将文件保存在任何地方,只需阅读内容csv并使用Insert Cursor迭代它以将其写入您的表/要素类。
有关如何使用csv模块从字符串中读取csv的信息,请参阅this post。然后循环遍历csv的行并使用Insert Cursor写入表。
答案 1 :(得分:0)
如果您的RDS恰好是Aurora MySql,那么您应该查看Loading Data from S3功能,在那里您可以跳过代码并逐行加载到您的数据库中。