Python MySql Выберите единую колонку, возвращающую странные ценности

Я столкнулся с этой проблемой, создав сценарий практики, чтобы научить себя некоторому 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.

 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. Как это исправить?

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

Либо распакуйте его в цикле:

 for comp, in cursor: 

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

 print(comp[0]) 

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