我将连接到S3存储桶,获取csv文件并将行复制到RDS DB。在这个脚本中我们使用arcpy,我对这个包不是很熟悉,我只是尝试直接从S3存储桶中获取csv文件作为源代码,而不是将其下载到服务器上。代码如下:
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")
错误:在CopyRows arcgisscripting.ExecuteError中。执行失败参数无效
如果我们使用服务器上的路径作为源路径,如下所示,它工作得很好:
sourcefile_csv = "D:\\DEV\\file1.csv"
arcpy.CopyRows_management(sourcefile_csv, "RDSTablePath", "")
任何帮助都将不胜感激。
发布于 2018-04-25 14:33:13
看起来您正在尝试使用Pandas数据帧作为使用CopyRows_management读取的表?我不认为这是函数的有效输入,因此出现“参数无效”错误。documentation说明in_rows应该是“要复制的要素类、图层、表或表视图中的行”。我认为在这里使用熊猫是不必要的。
因此,要么将csv保存在脚本可以访问它的地方(就像您在服务器上使用路径时在中所做的那样),或者,如果您不想将文件保存在任何地方,只需读取csv的内容并使用Insert Cursor遍历它,将其写入到表/要素类中。
有关如何使用csv模块从字符串中读取csv的信息,请参阅this post。然后循环遍历csv的行,并使用插入游标写入表。
发布于 2018-04-25 14:54:12
如果你的RDS恰好是一个Aurora,那么你应该看看Loading Data from S3特性,你可以跳过代码,只需逐行加载到你的DB中。
https://stackoverflow.com/questions/48379342
复制