2017-02-13 7 views
0

Я работаю с kinterbasdb, чтобы выбрать и обновить некоторые данные из баз данных 1998 года (да, к сожалению :() И API из kinterbasdb возвращает значения из запросов в кортежах, например:.Создание именованного кортежа из кортежа?

connection = connect(dsn="database.gdb", user="MYUSER", password="MYPASSWORD") 
cursor = connection.cursor() 
cursor.execute("SELECT * FROM TABLE_X") 
result = cursor.fetchone() # tuple => (value1, value2, value3, value4, value5) 

И я хотел бы сопоставить этот кортеж с именем кортежа. возможно ли это?

Я использую Python 2.7.13 (я был в состоянии обновить модуль kinterbasdb, чтобы заставить его работать ... по крайней мере)

+0

Вы проверили [документы] (https://docs.python.org/2/library/ collections.html # collections.somenamedtuple._make)? – user2357112

+0

Я этого не нашел. Благодаря!!!! –

ответ

1

Просто передайте свой кортеж конструктору namedtuple в виде расширенных аргументов, используя *.

In [1]: from collections import namedtuple 

In [2]: Response = namedtuple('Response', ['thing1', 'thing2', 'thing3', 'thing4']) 

In [3]: mytuple = (1, 2, 3, 4) 

In [4]: Response(*mytuple) 
Out[4]: DBResponse(thing1=1, thing2=2, thing3=3, thing4=4) 
+0

Хотя это не является строго ошибкой, я думаю, было бы гораздо лучше использовать одно и то же имя переменной для вашего типа 'namedtuple', который вы передадите ему как свое имя. То есть, либо измените «Ответ» на «DBResponse», либо наоборот. – Blckknght

0

Пример:

from collections import namedtuple 
t=("value1", "value2", "value3", "value4", "value5") 
Data=namedtuple("Data",["v1","v2","v3","v4","v5"]) 
nt=Data(*t) 
>>> nt 
Data(v1='value1', v2='value2', v3='value3', v4='value4', v5='value5') 

Или использовать _make метод:

>>> Data._make(t) 
Data(v1='value1', v2='value2', v3='value3', v4='value4', v5='value5') 

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

  • Нет связанных вопросов^_^