2012-05-11 1 views
1

У меня есть следующие функции:Почему эта функция возвращает None из базы данных?

def get_some_field(grouping_type_id): 
    checkConnection() # establishes connection if none 

    sql = "SELECT name FROM table_foo WHERE id=%d" % grouping_type_id 
    results = conn.execute(sql) 
    data = results.fetchone() 
    return str(data['name']) if ((data) and ('name' in data)) else '' 

Если таблица базы данных пуста, я ожидаю, что функция возвращает пустую строку, однако, None возвращается вместо этого.

Может ли кто-нибудь объяснить это поведение?

ответ

3

Это также возвращает 'None':

data = {'name': None} 
result = str(data['name']) if ((data) and ('name' in data)) else '' 

Проблема заключается в том, что (data) and ('name' in data) является truish, потому что data не пуст, и имеет 'name' набор ключей (хотя установлен None, вы не проверить это).

Изменить эту строку:

return str(data['name']) if ((data) and ('name' in data)) else '' 

в этой строке:

return str(data.get('name') or '') if data else '' 
+0

Не будет ли это нарушаться, если 'data'' '' '' '' '' ' То есть пустая строка за мой плохой ответ ниже? – JoeFish

+0

'str (data.get ('name', ''))' также будет возвращать '' None'' с '{'name': None}' – juliomalegria

+0

@JoeFish, julio.alegria: Вы оба правы, я добавил одна часть, которая его исправляет. – Tadeck

-1

Я хотел бы предположить, потому что это документально поведение SQLAlchemy. From the doc: (курсив мой)

fetchone()

Выборка одной строки, так же, как DB-API cursor.fetchone().

Если строка присутствует, курсор остается открытым после его вызова. Else курсор автоматически закрывается и никто не возвращается

.

+1

-1, вопрос не в том, почему' fetchone() 'возвращает' None', но почему функция 'get_some_field' возвращает' None' – juliomalegria

+0

К сожалению, эта функция означала " функция". – JoeFish

+0

Кроме того, @ julio.alegria благодарит за комментарий, а не молчал -1. – JoeFish

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