1

我有以下功能:

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它会被返回。

谁能解释这种行为?

4

2 回答 2

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 ''
于 2012-05-11T20:52:25.387 回答
-1

我会假设,因为这是记录在案的 sqlalchemy 行为。 来自文档:(强调我的)

获取一个()

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

如果存在一行,则在调用它后游标保持打开状态。否则光标自动关闭并返回 None

.

于 2012-05-11T20:52:33.777 回答