2017-01-16 2 views
0

У меня возникла повторяющаяся проблема при выполнении запросов MSSQL с использованием pymssql.pymssql: удалить или заменить значения NULL из строк результатов

Это код, я использую:

listOfRows = [] # I will append all reult rows to this list 

conn = pymssql.connect(user = 'the user', password = 'password', server = 'theserver', database = 'thedb') 
cursor = conn.cursor() 
query = 'SELECT * FROM table' 

cursor.execute(query) 
row = cursor.fetchone() 
while row: 
    row = cursor.fetchone() 
    listOfRows.append(row) 

Список listOfRows заканчивается как список кортежей, таких как:

[('value1', None, 'valuex'), (None, 'value2', 'valuex'), None] 

Обратите внимание, что кортежи имеют значения None, но и list всегда заканчивается тем, что его последнее значение также равно None.

Многие операции, которые я пытаюсь сделать с этими результатами, дают мне ошибку. Например:

[list(x) for x in listOfRows] 

приводит к ошибке:

TypeError: 'NoneType' object is not iterable 

Является ли эффективный способ избежать этой проблемы? Решение может быть либо на уровне запроса, либо с помощью метода Python. Я нахожу, что трачу много времени на создание циклов, чтобы удалить значения None.

+0

Если 'listOfRows' действительно' [('value1', None, 'valuex'), (None, 'value2', 'valuex')] ', вы не получили бы эту ошибку. Здесь что-то происходит. – Mureinik

ответ

2

Вы перепутали логику в своем цикле while. В настоящее время вы извлекаете строку из базы данных, добавляете ее в список и затем проверяете, не была ли строка не None. В связи с этим, у Вас есть запись как None в конце списка:

[('value1', None, 'valuex'), (None, 'value2', 'valuex'), None] 
#         single `None` object^

Вместо этого, вы должны выбрать строку из БД, проверьте None, а затем добавить его в список. Следовательно, ваш код должен быть:

cursor.execute(query) 
row = cursor.fetchone() 
while row: 
    listOfRows.append(row)  # <- Interchanged 
    row = cursor.fetchone() # <-- Lines 

Кроме того, в вашей текущей логике вы пропускаете содержимое первой строки.

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