Anything returned from any field in a cursor is a Python object because all data types are fundamentally objects:
>>> lst = [int(), float(), str(), bool(), None]
>>> for obj in lst:
... print(isinstance(obj, object))
...
True
True
True
True
True
>>>
In terms of why NULL gets returned as None; well, None is the closest data type conceptually to SQL NULL: Built-in Constants — Python 3.7.4 documentation
None
The sole value of the type NoneType
. None
is frequently used to represent the absence of a value, as when default arguments are not passed to a function.