使用python在S3中红移复制csv

使用python在S3中红移复制csv,python,copy,amazon-redshift,Python,Copy,Amazon Redshift,嗨,我有以下功能来保存csv文件: mysql_cur = mysql_conn.cursor() mysql_cur.execute('select * from %s where Date > "2018-01-01";' % mysql_table_name ) description = mysql_cur.description rows = mysql_cur.fetchall() for row in rows: c.writerow(row) 然后我手动将文件上

嗨,我有以下功能来保存csv文件:

mysql_cur = mysql_conn.cursor()
mysql_cur.execute('select * from %s where Date > "2018-01-01";' % mysql_table_name  )
description = mysql_cur.description
rows = mysql_cur.fetchall()
for row in rows:
    c.writerow(row)
然后我手动将文件上传到S3存储桶

上次运行复制查询时:

redshift_cur = redshift_conn.cursor()

sql = """copy kpi_kpireport from 's3://clab-migration/kpi.csv' 
credentials 'aws_access_key_id=ID;aws_secret_access_key=KEY/KEY/pL/KEY'
csv;"""
print(redshift_cur.execute(sql))

当我在SQL Workbench/J中使用COPY命令时,我不确定这里的execute语句中没有复制任何行的语法有何错误

实际上,您没有将数据导入红移的原因似乎是您没有启用自动提交,因此,您的命令执行成功,但它确实将数据复制到红移,但没有提交。因此,当您通过从
控制台
或您的
工作台/J
查询来选择时,您不会看到数据

您应该显式地开始和提交事务。 我只是给你一个简单的工作示例

import psycopg2


def redshift():

    conn = psycopg2.connect(dbname='**_dev_**', host='888888888888****.u.****.redshift.amazonaws.com', port='5439', user='******', password='********')
    cur = conn.cursor();

    # Begin your transaction
    cur.execute("begin;")

    cur.execute("copy kpi_kpireport from 's3://clab-migration/kpi.csv' credentials 'aws_access_key_id=ID;aws_secret_access_key=KEY/KEY/pL/KEY' csv;")
    # Commit your transaction
    cur.execute("commit;")
    print("Copy executed fine!")

redshift();
现在,如果运行上述代码,您将看到复制的数据


如果从上述代码中删除两行,
cur.execute(“begin;”)
cur.execute(“commit;”)
运行它,即使运行成功且没有错误,也不会在红移中看到数据。

您的问题是什么?现在有什么办法了吗?您是否收到错误消息?
redshift\u conn
是否适用于其他事情,例如
SELECT 42
?从Python代码运行COPY命令时会出现什么错误?