# Dynamic Data Table Row Data Extraction in UE 5.4.4 Python API

**URL:** <https://forums.unrealengine.com/t/dynamic-data-table-row-data-extraction-in-ue-5-4-4-python-api/2510008>\
**Category:** Pipeline & Plugins\
**Tags:** Python, unreal-engine, Scripting, question\
**Created:** [May 14, 2025, 3:08pm UTC](https://forums.unrealengine.com/t/dynamic-data-table-row-data-extraction-in-ue-5-4-4-python-api/2510008 "2025-05-14T15:08:30Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Egizz983](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@Egizz983](https://forums.unrealengine.com/u/Egizz983)\
**Post date:** [May 14, 2025, 3:08pm UTC](https://forums.unrealengine.com/t/dynamic-data-table-row-data-extraction-in-ue-5-4-4-python-api/2510008/1 "2025-05-14T15:08:31Z")

</div>

I’m struggling to dynamically extract row data from Data Tables in Unreal Engine 5.4.4 using the Python API for my project. I need to read row data (e.g., `SecondsPerYear` from `DT_GameConfig` with struct `ST_GameConfig`) for any Data Table, including new structure classes, without manual mapping. The script correctly retrieves row types (e.g., `ST_BuildInfo`, `ST_Job`, `ST_GameConfig`) and row names (e.g., `Shrub`, `Idle`) but fails to access row field values, producing empty `data` fields in the output JSON.

What I’ve Tried:  
I’ve attempted several Python API methods to access row data, all of which failed:

- `data_table.get_row(row_name)`: `AttributeError: 'DataTable' object has no attribute 'get_row'`.
- `data_table.get_row_map()`: `AttributeError: 'DataTable' object has no attribute 'get_row_map'`.
- `data_table.get_all_rows()`: `AttributeError: 'DataTable' object has no attribute 'get_all_rows'`.
- `unreal.DataTableFunctionLibrary.get_data_table_row()`: `AttributeError: type object 'DataTableFunctionLibrary' has no attribute 'get_data_table_row'`.

```auto
# Function to get Data Table structure
def get_data_table_structure(data_table):
    structure = {"row_type": "Unknown", "rows": []}
    if data_table:
        try:
            # Get row structure (Row Type)
            row_struct = data_table.get_row_struct()
            structure["row_type"] = row_struct.get_name() if row_struct else "Unknown"
            # Get row names
            row_names = data_table.get_row_names()
            # Load external row data (if available)
            external_data = load_external_row_data()
            table_name = data_table.get_name()
            manual_data = external_data.get(table_name, {}).get("rows", {})
            
            for row_name in row_names:
                row_details = {}
                # Try to use manual data if available
                if str(row_name) in manual_data:
                    row_details = manual_data[str(row_name)]
                    unreal.log(f"Using manual row data for {row_name} in {table_name}")
                else:
                    # Attempt dynamic row data access (placeholder, as API is limited)
                    unreal.log_warning(f"No dynamic row data access for {row_name} in {table_name}; consider adding to {external_data_file}")
                structure["rows"].append({"name": str(row_name), "data": row_details})
        except Exception as e:
            unreal.log_error(f"Error getting Data Table structure for {data_table.get_name()}: {str(e)}")
            try:
                row_names = data_table.get_row_names()
                for row_name in row_names:
                    structure["rows"].append({"name": str(row_name), "data": {}})
            except Exception as e2:
                unreal.log_error(f"Failed to get row names for {data_table.get_name()}: {str(e2)}")
    return structure

```

This is the current output :

 ![image](https://d3kjluh73b9h9o.cloudfront.net/original/4X/a/a/e/aae4b27e196842cf97d03ee451c29ec6ba779d75.png)  
expected output :  
 ![image](https://d3kjluh73b9h9o.cloudfront.net/original/4X/e/4/3/e435f5302b9f366fb3dadcd22d7e3d0804cde2ee.png)
