为什么这个函数从数据库中返回None?

时间:2012-05-11 20:46:55

标签: python sqlalchemy

我有以下功能:

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

任何人都可以解释这种行为吗?

2 个答案:

答案 0 :(得分:3)

这也会返回'None'

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

问题是(data) and ('name' in data)很不对劲,因为data不为空,并且设置了'name'键(虽然设置为None,但您不检查它)

更改此行:

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

进入这一行:

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

答案 1 :(得分:-1)

我会假设,因为这是记录的sqlalchemy行为。 From the doc:(强调我的)

  

fetchone()

     

获取一行,就像DB-API cursor.fetchone()。

一样      

如果存在行,则在调用此行后光标将保持打开状态。   否则,光标将自动关闭并且返回无