docs: def convert_datetime(obj):
      """Returns a DATETIME or TIMESTAMP column value as a datetime object:
  
        >>> datetime_or_None('2007-02-25 23:06:20')
        datetime.datetime(2007, 2, 25, 23, 6, 20)
        >>> datetime_or_None('2007-02-25T23:06:20')
        datetime.datetime(2007, 2, 25, 23, 6, 20)
  
      Illegal values are returned as None:
  
        >>> datetime_or_None('2007-02-31T23:06:20') is None
        True
        >>> datetime_or_None('0000-00-00 00:00:00') is None
        True
  
      """
      if ' ' in obj:
          sep = ' '
      elif 'T' in obj:
          sep = 'T'
      else:
          return convert_date(obj)
  
      try:
          ymd, hms = obj.split(sep, 1)
          usecs = '0'
          if '.' in hms:
              hms, usecs = hms.split('.')
          usecs = float('0.' + usecs) * 1e6
          return datetime.datetime(*[ int(x) for x in ymd.split('-')+hms.split(':')+[usecs] ])
      except ValueError:
          return convert_date(obj)