> ## Documentation Index
> Fetch the complete documentation index at: https://docs.activeviam.com/llms.txt
> Use this file to discover all available pages before exploring further.

# atoti.Column.default_value

#### *property* Column.default\_value *: Constant | [None](https://docs.python.org/3/library/constants.html#None)*

Value used to replace `None` inserted values.

The default value can either be:

* `None`:
  ```pycon theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
  >>> none_default_value_table = session.create_table(
  ...     "None",
  ...     data_types={"ZonedDateTime": "ZonedDateTime"},
  ...     default_values={"ZonedDateTime": None},
  ... )
  >>> none_default_value_table["ZonedDateTime"].default_value
  ```
* a value matching the column’s [`data_type`](./atoti.Column.data_type#atoti.Column.data_type):
  ```pycon theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
  >>> from datetime import datetime
  >>> from zoneinfo import ZoneInfo
  >>> homogeneous_default_value_table = session.create_table(
  ...     "Homogeneous",
  ...     data_types={"ZonedDateTime": "ZonedDateTime"},
  ...     default_values={
  ...         "ZonedDateTime": datetime(
  ...             2025,
  ...             2,
  ...             13,
  ...             20,
  ...             58,
  ...             42,
  ...             tzinfo=ZoneInfo("America/New_York"),
  ...         )
  ...     },
  ... )
  >>> homogeneous_default_value_table["ZonedDateTime"].default_value
  datetime.datetime(2025, 2, 13, 20, 58, 42, tzinfo=zoneinfo.ZoneInfo(key='America/New_York'))
  >>> session.create_table(  
  ...     "Heterogeneous",
  ...     data_types={"ZonedDateTime": "ZonedDateTime"},
  ...     default_values={
  ...         # Stringified ZonedDateTimes are not accepted.
  ...         "ZonedDateTime": "2025-02-13T20:58:42-05:00[America/New_York]"
  ...     },
  ... )
  Traceback (most recent call last):
      ...
  atoti._graphql.client.exceptions.GraphQLClientGraphQLMultiError: Coercion from STRING to ZONED_DATE_TIME is not supported. ...
  >>> session.create_table(  
  ...     "Heterogeneous",
  ...     data_types={"ZonedDateTime": "ZonedDateTime"},
  ...     default_values={
  ...         # `"N/A"` is not accepted either.
  ...         "ZonedDateTime": "N/A"
  ...     },
  ... )
  Traceback (most recent call last):
      ...
  atoti._graphql.client.exceptions.GraphQLClientGraphQLMultiError: Coercion from STRING to ZONED_DATE_TIME is not supported. ...
  >>> session.create_table(  
  ...     "Heterogeneous",
  ...     data_types={"ZonedDateTime": "ZonedDateTime"},
  ...     default_values={
  ...         # ZonedDateTime values must have a zone info.
  ...         "ZonedDateTime": datetime(2025, 2, 13, 20, 58, 42)
  ...     },
  ... )
  Traceback (most recent call last):
      ...
  atoti._graphql.client.exceptions.GraphQLClientGraphQLMultiError: Coercion from LOCAL_DATE_TIME to ZONED_DATE_TIME is not supported. ...
  ```

Each data type has its own default `default_value` value:

```pycon theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
>>> import pprint
>>> all_data_types = [
...     "boolean",
...     "boolean[]",
...     "double",
...     "double[]",
...     "float",
...     "float[]",
...     "int",
...     "int[]",
...     "LocalDate",
...     "LocalDateTime",
...     "LocalTime",
...     "long",
...     "long[]",
...     "Object",
...     "String",
...     "String[]",
...     "ZonedDateTime",
... ]
>>> all_data_types_table = session.create_table(
...     "All",
...     data_types={data_type: data_type for data_type in all_data_types},
... )
>>> pprint.pp(
...     {
...         column_name: all_data_types_table[column_name].default_value
...         for column_name in all_data_types_table
...     }
... )
{'boolean': False,
 'boolean[]': None,
 'double': None,
 'double[]': None,
 'float': None,
 'float[]': None,
 'int': None,
 'int[]': None,
 'LocalDate': datetime.date(1970, 1, 1),
 'LocalDateTime': datetime.datetime(1970, 1, 1, 0, 0),
 'LocalTime': datetime.time(0, 0),
 'long': None,
 'long[]': None,
 'Object': 'N/A',
 'String': 'N/A',
 'String[]': None,
 'ZonedDateTime': datetime.datetime(1970, 1, 1, 0, 0, tzinfo=TzInfo(0))}
```

Columns part of the table [`keys`](./atoti.Table.keys#atoti.Table.keys) cannot have `None` as their default value.
Key columns with:

* a numeric scalar data type default to `0`:
  ```pycon theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
  >>> numeric_scalar_data_types = [
  ...     "double",
  ...     "float",
  ...     "int",
  ...     "long",
  ... ]
  >>> numeric_scalar_data_types_table = session.create_table(
  ...     "Numeric scalar",
  ...     data_types={
  ...         data_type: data_type for data_type in numeric_scalar_data_types
  ...     },
  ...     keys=numeric_scalar_data_types,
  ... )
  >>> {
  ...     column_name: numeric_scalar_data_types_table[
  ...         column_name
  ...     ].default_value
  ...     for column_name in numeric_scalar_data_types_table
  ... }
  {'double': 0.0, 'float': 0.0, 'int': 0, 'long': 0}
  >>> numeric_scalar_data_types_table += (None, None, None, None)
  >>> numeric_scalar_data_types_table.head()
  Empty DataFrame
  Columns: []
  Index: [(0.0, 0.0, 0, 0)]
  ```

* an array data type must have their default value specified:
  ```pycon theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
  >>> array_data_types = ["int[]", "long[]", "float[]", "double[]"]
  >>> session.create_table(
  ...     "Array",
  ...     data_types={data_type: data_type for data_type in array_data_types},
  ...     keys=array_data_types,
  ... )  
  Traceback (most recent call last):
      ...
  atoti._graphql.client.exceptions.GraphQLClientGraphQLMultiError: Cannot make a int[] non-nullable because there is no global default value defined for this type. You should manually define a default value...
  >>> array_data_types_table = session.create_table(
  ...     "Array",
  ...     data_types={data_type: data_type for data_type in array_data_types},
  ...     default_values={
  ...         "int[]": (1,),
  ...         "long[]": (2,),
  ...         "float[]": (3.0,),
  ...         "double[]": (4.0,),
  ...     },
  ...     keys={"int[]"},
  ... )
  >>> {
  ...     column_name: array_data_types_table[column_name].default_value
  ...     for column_name in array_data_types_table
  ... }
  {'int[]': (1,), 'long[]': (2,), 'float[]': (3.0,), 'double[]': (4.0,)}
  >>> array_data_types_table += (None, None, None, None)
  >>> array_data_types_table.head()
        long[] float[] double[]
  int[]
  [1]      [2]   [3.0]    [4.0]
  ```

Changing the default value from:

* `None` to something else affects both the past `None` values and the future ones:
  ```pycon theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
  >>> table = session.create_table(
  ...     "Change",
  ...     data_types={
  ...         "int[]": "int[]",
  ...         "long[]": "long[]",
  ...         "float": "float",
  ...         "String": "String",
  ...     },
  ...     default_values={
  ...         "int[]": (1,),
  ...         "long[]": None,
  ...         "float": None,
  ...         "String": None,
  ...     },
  ...     keys={"int[]"},
  ... )
  >>> table += (None, None, None, None)
  >>> table["int[]"].default_value = (2,)
  >>> table["long[]"].default_value = (3, 4, 5)
  >>> table["float"].default_value = 6.0
  >>> table["String"].default_value = "seven"
  >>> {column_name: table[column_name].default_value for column_name in table}
  {'int[]': (2,), 'long[]': (3, 4, 5), 'float': 6.0, 'String': 'seven'}
  >>> table += (None, None, None, None)
  >>> table.head().sort_index()
            long[]  float String
  int[]
  [1]    [3, 4, 5]    6.0  seven
  [2]    [3, 4, 5]    6.0  seven
  ```
* non-`None` to something else does not affect the past values:
  ```pycon theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
  >>> table["int[]"].default_value = (8,)
  >>> table["long[]"].default_value = (9, 10, 11)
  >>> table["float"].default_value = 12.0
  >>> table["String"].default_value = "thirteen"
  >>> table += (None, None, None, None)
  >>> table.head().sort_index()
              long[]  float    String
  int[]
  [1]      [3, 4, 5]    6.0     seven
  [2]      [3, 4, 5]    6.0     seven
  [8]    [9, 10, 11]   12.0  thirteen
  ```

Changing the default value from non-`None` to `None` is impossible both:

* for key columns:
  ```pycon theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
  >>> table["int[]"].default_value = None  
  Traceback (most recent call last):
      ...
  atoti._graphql.client.exceptions.GraphQLClientGraphQLMultiError: Cannot define a null default value for a non-nullable type...
  >>> table["int[]"].default_value
  (8,)
  ```
* and non-key columns:
  ```pycon theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
  >>> table["float"].default_value = None  
  Traceback (most recent call last):
      ...
  atoti._graphql.client.exceptions.GraphQLClientGraphQLMultiError: Cannot define a null default value for a non-nullable type...
  >>> table["float"].default_value
  12.0
  ```
