2014-10-20 134 views
0

我正在尝试使用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() 

回答

5

使用价值的每一行的名单上加入功能:

print ",".join(row.values()) 

简单地说,加入函数调用上,我们可以认为的“胶水”的字符串,并采取作为论点的“片断”列表。结果是由“胶水”将一串“碎片”“连在一起”。例如:

>>> glue = "+" 
>>> pieces = ["a", "b", "c"] 
>>> glue.join(pieces) 
"a+b+c" 

(因为row.values()返回一个列表,你实际上并不需要的理解,所以在第一甚至比我写的比较简单)

+0

为什么我收到一个错误NameError:名字“加入”没有定义。 的行结果: 打印加入( “”[值值row.values()]) 打印 “)到S3://” conn.close() – paddu 2014-10-20 21:01:47

+0

对不起,是我不好。尝试更正的版本。 – 2014-10-20 21:26:21

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://" 

感谢您的帮助,乔恩