我正在尝试使用python生成一个在redshift中生成卸载命令的脚本。我不是专业的Python程序员。我需要在哪里可以为卸载列表生成所有列。如果列具有特定名称,我需要替换为函数。我面临的挑战是将“,”添加到字典中的最后一项。有没有办法可以避免使用最后一个逗号?任何帮助将不胜感激。
import psycopg2 from psycopg2.extras
import RealDictCursor
try:
conn = psycopg2.connect("dbname='test' port='5439' user='scott' host='something.redshift.amazonaws.com' password='tiger'");
except:
print "Unable to connect to the database"
conn.cursor_factory = RealDictCursor
cur = conn.cursor()
conn.set_isolation_level( psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT )
try:
cur.execute("SELECT column from pg_table_def where schema_name='myschema' and table_name ='tab1' " );
except:
print "Unable to execute select statement from the database!"
result = cur.fetchall()
print "unload mychema.tab1 (select "
for row in result:
for key,value in row.items():
print "%s,"%(value)
print ") AWS Credentials here on..."
conn.close()
答案 0 :(得分:5)
在每行的值列表中使用join函数:
print ",".join(row.values())
简单地说,在一个我们可以认为是“胶水”的字符串上调用join函数,并将“pieces”列表作为其参数。结果是由“胶水”“串在一起”的一串“碎片”。例如:
>>> glue = "+"
>>> pieces = ["a", "b", "c"]
>>> glue.join(pieces)
"a+b+c"
(因为row.values()返回一个列表,你实际上并不需要理解,所以它比我最初写的更简单)
答案 1 :(得分:0)
事实上,这效果更好。
columns = []
for row in result:
if (row['column_name'] == 'mycol1') or (row['column_name'] == 'mycol2') :
columns.append("func_sha1(" + row['column_name'] + "||" + salt +")")
else:
columns.append(row['column_name'])
print selstr + ",".join(columns)+" ) TO s3://"
感谢您的帮助,Jon