3

Я столкнулся с этой проблемой, создав сценарий практики, чтобы научить себя некоторому Python и библиотеке mysql.connector. Когда я выполнить запрос с помощью одного столбца и напечатать значения, я получаю результаты, как:

('tech-pc-1',) #Python 3.4.3 (u'tech-pc-1',) #Python 2.7.6

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

tech-pc-1 jdoe

Я делаю это на сервере под управлением Ubuntu 14.04.Python MySql Select Single Column Возвращающиеся странные значения

from mysql.connector import (connection) 
import datetime<br> 
conn = connection.MySQLConnection(user='user',password='pass',host='host',database='db') 

single_col_query = "select comp from logons where dt between %s and %s" 
multi_col_query = "select comp,user from logons where dt between %s and %s" 

end_dt = datetime.datetime.now() 
begin_dt = datetime.datetime(end_dt.year, end_dt.month, 1, 0, 0, 0) 

cursor = conn.cursor() 

cursor.execute(single_col_query, (begin_dt, end_dt)) 
for(comp) in cursor: 
    print(comp) # ex. ('tech-pc-1',) or (u'tech-pc-1',) 

cursor.execute(multi_col_query, (begin_dt, end_dt)) 
for(comp,user) in cursor: 
    print(comp, user) # ex. tech-pc-1 jdoe 

cursor.close() 
conn.close() 

У меня есть несколько вопросов:

  1. Почему это происходит?
  2. Как исправить это?
+1

Это выглядит очень нормально для меня? Я не уверен, что вы ожидаете увидеть. –

ответ

2

Вы всегда получаете кортеж, даже если возвращается только один столбец. Во втором примере вы распаковываете кортеж, но в первом случае вы этого не делаете, поэтому вы видите репер() кортежа.

Либо распаковать его в петлю:

for comp, in cursor: 

или просто ссылаться на элемент непосредственно при печати:

print(comp[0]) 

Примечание нет необходимости в скобках в для заявления, даже при распаковке.

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