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の振る舞いだからだと思います。 ドキュメントから:(私の強調)

fetchone()

DB-APIのcursor.fetchone()と同じように、1行をフェッチします。

行が存在する場合、これが呼び出された後もカーソルは開いたままになります。それ以外の場合、カーソルは自動的に閉じられ、Noneが返されます

于 2012-05-11T20:52:33.777 に答える