2016-02-09 1 views
4

Я подключаюсь к базе данных mysql через соединитель mysql и запускаю простой запрос, чтобы вытащить список идентификаторов. Мне нужно перебрать этот список и передать их в другой код. По какой-то причине я получаю список кортежей. Это ожидаемое поведение? Если нет, что я делаю неправильно? Вот фрагмент моего кода:Python mysql connector возвращает tuple

import mysql.connector 
conn = mysql.connector.connect(host='127.0.0.1', database='t', user='r', password='pwd') 
cursor = conn.cursor() 
query = ("select id from T where updated < '%s'" % (run_date)) 
cursor.execute(query) 
for row in cursor: 
    print (row) 

cursor.close() 

Я получаю следующую обратно (от поля INT в г/б):

(Decimal('991837'),) 
(Decimal('991838'),) 
(Decimal('991839'),) 
(Decimal('991871'),) 
(Decimal('991879'),) 
(Decimal('991899'),) 
(Decimal('992051'),) 
(Decimal('992299'),) 
(Decimal('992309'),) 

ответ

2

Да, это ожидаемое поведение. Использование курсора в качестве итерации в основном эквивалентно циклу над ним с использованием метода fetchone(). Из documentation for fetchone() (курсив):

Этот метод извлекает следующую строку набора результатов запроса и возвращает одного последовательность или None, если нет больше строк не доступны. По умолчанию возвращенный кортеж состоит из данных, возвращаемых сервером MySQL, , преобразованных в объекты Python. Если курсор является необработанным курсором, такого преобразования не происходит;

+0

Не имеет отношения к исходному вопросу, который я задал, но как преобразовать (Десятичный ('992309')) в 992309? – epipko

+1

@epipko Возьмите первый элемент кортежа ('[0]'), тогда у вас есть [Десятичный объект] (https://docs.python.org/2/library/decimal.html#decimal-objects), которые вы можете преобразовать в 'int', если вам нужно. – glibdud

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