Как добавить десятичное число из результата запроса MySQL в Python

Я запускаю запрос MySql в Python, используя следующий код:

cur = conn.cursor()
query = ("""select sum(if(grade is not null,1,0)) as `test`,
    sum(if(grade < 7,1,0)) as `bad`,
    sum(if(grade < 7,1,0))/sum(if(grade is not null,1,0))*100 as `Pct Bad Grade`,
    student
    from grades_database
    where test_date >= '2014-08-01'
    group by student
    order by `Pct Bad Grade` desc;""")
cur.execute(query)

и я получаю результат что-то вроде

(Decimal('1'), Decimal('3'), Decimal('50.0000'), 'John Doe')

Мне нужно удалить строку «Десятичная» перед значениями.

Я попытался использовать следующее из Прошлый пример

output = []
for row in cur:
    output.append(float(row[0]))
print output

Но это дает мне это

[20.0, 5.0, 3.0, 7.0, 7.0, 2.0, 6.0, 7.0, 7.0, 7.0,...]

В идеале я хотел бы изменить порядок вывода и получить что-то вроде

(John Doe, 50, 3, 1)]

из

(Decimal('1'), Decimal('3'), Decimal('50.0000'), 'John Doe')

person DataTx    schedule 10.10.2014    source источник
comment
Объекты Decimal более точны, чем объекты float. Когда вы печатаете или записываете данные, вы получите только числовое значение, например: print Decimal('50.0000') дает: 50.0000.   -  person mechanical_meat    schedule 10.10.2014


Ответы (1)


Измените порядок вашего запроса, чтобы получить желаемый порядок (имя, затем оценки)

cur = conn.cursor()
query = ("""select student,
    sum(if(grade is not null,1,0)) as `test`,
    sum(if(grade < 7,1,0)) as `bad`,
    sum(if(grade < 7,1,0))/sum(if(grade is not null,1,0))*100 as `Pct Bad Grade`
    from grades_database
    where test_date >= '2014-08-01'
    group by student
    order by `Pct Bad Grade` desc;""")
cur.execute(query)

Затем вы можете изменить десятичные значения, поэтому пропустите первый индекс (имя).

for index, row in enumerate(cur):
    if index:
        output[index] = int(row)
print output
person Rod    schedule 10.10.2014