Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 28, 2015 21:47:13

Gam
Зарегистрирован: 2015-04-12
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Операции со списком.

Добрый вечер.
Застрял на небольшом и непонятном для меня моменте. Хотя мне кажется что “собака зарыта совсем недалёко”.
Идёт SQL запрос по результатам которого данные выгружаются в Excel.

    cursor = connection.cursor()
    cursor.execute(SQL)
    for row in cursor:
        T = T + 1
        MEM_1, MEM_2, MEM_3, NAME = row
        ws.write(T, 0, MEM_1.decode('utf-8'))
        ws.write(T, 1, MEM_2)
        ws.write(T, 2, MEM_3)
        ws.write(T, 3, NAME.decode('utf-8'))
    cursor.close()
Всё вроде работает, но при попытке заменить
 MEM_1, MEM_2, MEM_3, NAME = row
на
 desc = [d[0] for d in cursor.description]
у меня, самоучки, уже тупик. Как преобразовать desc в понятный MEM_1, MEM_2, MEM_3, NAME?
 cursor = CONNECTION.cursor()
    cursor.execute(SQL)
    desc = [d[0] for d in cursor.description]
    for row in cursor:
        desc = row
        

Есть подозрение что ответ был уже тут: http://stackoverflow.com/questions/7745952/python-expand-list-to-function-arguments

Отредактировано Gam (Апрель 28, 2015 21:53:33)

Офлайн

#2 Апрель 28, 2015 23:02:02

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Операции со списком.

напишите что вы хотите получить
с write
а то смотря на это

    desc = [d[0] for d in cursor.description]
    for row in cursor:
        desc = row
я что-то мало понимаю…



————————————————
-*- Simple is better than complex -*-

Офлайн

#3 Апрель 29, 2015 00:56:48

Gam
Зарегистрирован: 2015-04-12
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Операции со списком.

На команду:

desc = [d[0] for d in cursor.description]
выходит результат наименования полей в выполненном запросе в виде списка
(MEM_1, MEM_2, MEM_3, NAME)
Я хотел лишь вывести результат значения в виде переменных.
Т.е. - если
desc = (MEM_1, MEM_2, MEM_3, NAME)
то и в коде результат должен быть аналогично
MEM_1, MEM_2, MEM_3, NAME = row
А row это строка из результата sql-запроса в виде:
5587   587   58   ГЕЛ548779


Если ещё проще то типо такого
def descw (list):
    if list == 'MEM_1': return ws.write(EXCELSTR, EXCELSTB, list)
    if list == 'MEM_2': return ws.write(EXCELSTR, EXCELSTB, list)
    if list == 'MEM_3': return ws.write(EXCELSTR, EXCELSTB, list)
    if list == 'NAME': return ws.write(EXCELSTR, EXCELSTB, 'NAME.decode(\'utf-8\')')
...
cursor = CONNECTION.cursor()
    cursor.execute(SQL)
    desc = [d[0] for d in cursor.description]
    for row in cursor:
        desc = row
        descw(desc)
Правда я конечно неверно написал код и он не работает. Я ещё не понял конкретно логику и осмысливаю в процессе. В результате, должно получиться, что не важно сколько полей будет в выполненном запросе, он выгрузит их всех согласно функции descw (list) в которой заранее прописаны все правила. Сейчас я застрял только в выведении результата значений в виде переменных.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version