2014-10-20 4 views
0

Я пытаюсь создать python для генерации скрипта, который генерирует команду unload в redshift. Я не специалист по программированию на Python. Мне нужно, чтобы я мог генерировать все столбцы для списка выгрузки. Если столбец имеет определенное имя, мне нужно заменить его функцией. Задача, с которой я столкнулся, заключается в добавлении «,» к последнему элементу в словаре. Есть ли способ избежать последней запятой? Любая помощь будет оценена по достоинству.удалить последнюю запятую из словаря/list

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 ​​()]) печати ") TO s3: //" conn.Close() – paddu

+0

К сожалению, мой плохой , Попробуйте исправленную версию. –

0

Infact, это работало лучше.

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

Спасибо за вашу помощь, Джон

Смежные вопросы