我有以下功能:
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
。
任何人都可以解释这种行为吗?
答案 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()。
一样如果存在行,则在调用此行后光标将保持打开状态。 否则,光标将自动关闭并且返回无