2017-02-23 84 views
0

Я новичок в Python и пытаюсь добавить некоторые данные из таблицы Oracle в массив и добавить другое значение как datetime (string) для записи.как присоединиться к tuple datetime

Мой код:

now = datetime.now().strftime("%Y-%m-%d %H:%M:%S") 
con = cx_Oracle.connect('user', 'pass', dsn_tns) 
q='SELECT columns FROM table' 

device_status = [] 
cursor = con.cursor() 
cursor.execute(q) 
results = cursor.fetchall() 

for row in results: 
    device_status.append(row + tuple(now)) 

con.close() 
print device_status[1] 

Это выход:

('1110', '1000074', 2060, '2', '0', '1', '7', '-', '0', '2', '-', '2', '3', ' ', '1', '1', ':', '5', '2', ':', '0', '2') 

Я хочу присоединиться к дате, так что выход будет выглядеть следующим образом:

('1110', '1000074', 2060,'2017-02-23 11:57:41') 

пытался использовать но получена следующая ошибка:

can only concatenate tuple (not "str") to tuple 

Что я делаю неправильно?

ответ

1

Небольшое изменение,

for row in Results: 
    device_status.append(row + (now,)) 
           ^

, это делают, который как кортеж. Так что оба становятся кортежами.

И tuple(now) разделят все значения, как это,

In [42]: a = '2017-02-23 11:57:41' 
In [43]: print tuple(a) 
('2', '0', '1', '7', '-', '0', '2', '-', '2', '3', ' ', '1', '1', ':', '5', '7', ':', '4', '1') 

Смотрите работу,

In [34]: time_ 
Out[34]: '2017-02-23 15:33:42.353505' 
In [35]: (1,2,45.7,799)+(time_,) 
Out[35]: (1, 2, 45.7, 799, '2017-02-23 15:33:42.353505') 


In [36]: (1,2,45.7,799)+(time_) # tried with out , and gets an error 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-36-551a4c2dc8d7> in <module>() 
----> 1 (1,2,45.7,799)+(time_) 

TypeError: can only concatenate tuple (not "str") to tuple 
+0

благодарственных лет. работает хорошо для меня. –

1

Отредактировано: Я узнал, что вы можете получить доступ к элементам кортежа по индексу. Вы могли бы сделать что-то вроде этого:

>>> a 
('1110', '1000074', 2060, '2', '0', '1', '7', '-', '0', '2', '-', '2', '3', ' ', '1', '1', ':', '5', '2', ':', '0', '2') 
>>> print(a[0], a[1], a[2], (''.join(a[3:]))) 
('1110', '1000074', 2060, '2017-02-23 11:52:02') 

Затем можно добавить это значение к device_status списка.

Это зависит от первых трех значений, которые всегда относятся к типу, который вы ищете, и от индекса 3, начиная с даты и времени. Надеюсь это поможет.

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