Le code que j'essayais précédemment échoue car il suppose que np.Nan est son propre type alors qu'il s'agit en fait d'un float. Le code suivant, courtoisie de Daniele Varrazzo sur la liste de diffusion psycopg2 , fait le travail correctement.
def nan_to_null(f,
_NULL=psycopg2.extensions.AsIs('NULL'),
_Float=psycopg2.extensions.Float):
if not np.isnan(f):
return _Float(f)
return _NULL
psycopg2.extensions.register_adapter(float, nan_to_null)