    

 ## On this page

  

 

 # Exporting data

 Last update: 16.07.2025 

Export the values of Ultimate tensile strength, Modulus, Baseline fiber volume, and Poisson's ratio for a set of records from the MI Training database.

This example demonstrates:

- Retrieving a list of databases from a Granta MI server
- Browsing the tables of a Granta MI database
- Searching a Granta MI database using the *CriteriaSearch* operation
- Retrieving values for attributes of a record

## Create a Granta MI Session

Import the GRANTA\_MIScriptingToolkit package, and create a connection to a Granta MI server.

```python
import GRANTA_MIScriptingToolkit as gdl

session = gdl.GRANTA_MISession('http://my.server.name/mi_servicelayer', autoLogon=True)

```

## Get the Databases

Access the browse service from the session and execute the *GetDatabases* method.

```python
browseService = session.browseService
databases = browseService.GetDatabases().databases

print("Found {0} databases on the Granta MI Server".format(len(databases)))
for d in databases:
    print("Database key: {0.DBKey}, Database name: {0.volumeName}".format(d))

```

*Previous cell output:*

```output
Found 1 databases on the Granta MI Server
Database key: MI_Training, Database name: MI Training

```

Use pandas to display the available databases.

```python
import pandas as pd

df = pd.DataFrame({'DBKey': [db.DBKey for db in databases],
                  'DBName': [db.volumeName for db in databases]})
df

```

    DBKey DBName     0 MI\_Training MI Training  

## Get the tables in a database

Use the *GetTables* method from the browse service to see what tables are available in the MI Training database.

```python
dbKey = "MI_Training"

tables = browseService.GetTables(gdl.GetTables(DBKey=dbKey)).tableDetails

print("Found {0} tables in database {1}".format(len(tables), dbKey))
print("Printing the first 5")
for t in tables[:5]:
    print("Table name: {0}".format(t.tableReference.name))

```

*Previous cell output:*

```output
Found 20 tables in database MI_Training
Printing the first 5
Table name: MaterialUniverse
Table name: ProcessUniverse
Table name: Restricted Substances
Table name: Legislations and Lists
Table name: Design Data

```

## Searching a database

Search MI Training for all records in the Tensile Test Data table which have a defined *Young's modulus (11-axis) (normalized)*

```python
table = 'Tensile Test Data'
attribute = "Young's modulus (11-axis) (normalized)"

tableRef = gdl.PartialTableReference(tableName=table)
attrRef = gdl.AttributeReference(name=attribute, DBKey=dbKey, partialTableReference=tableRef)
searchCriterion = gdl.RecordSearchCriterion(searchAttribute=attrRef, existsSearchValue=gdl.ExistsSearchValue())
request = gdl.CriteriaSearch(DBKey=dbKey, searchCriteria=[searchCriterion])

searchResults = session.searchService.CriteriaSearch(request).searchResults

```

Print the *shortName* and *longName* of the first 5 records returned by the search.

```python
df2 = pd.DataFrame({'ShortName': [r.shortName for r in searchResults],
                     'LongName': [r.longName  for r in searchResults]})
df2.head()

```

    ShortName LongName     0 LBJ8311A S-Glass Unitape S2/SP381, 3M, 0° tension, Spec...   1 LBJ6213A S-Glass Unitape S2/SP381, 3M, 0° tension, Spec...   2 LBJ4211A S-Glass Unitape S2/SP381, 3M, 0° tension, Spec...   3 LBJ4213A S-Glass Unitape S2/SP381, 3M, 0° tension, Spec...   4 LBJ6214A S-Glass Unitape S2/SP381, 3M, 0° tension, Spec...  

## Export data from records

Create attribute references for the attributes you want to export and export data from all records.

```python
attributes = ["Young's Modulus (11-axis) (normalized)", "Ultimate tensile strength (normalized)",
              "Baseline fiber volume", "Elastic Poisson's Ratio (12-plane)"]

attrRefs = [gdl.AttributeReference(name=a, DBKey=dbKey, partialTableReference=tableRef) for a in attributes]
recordRefs = [r.recordReference for r in searchResults]
request = gdl.GetRecordAttributesByRefRequest(recordReferences=recordRefs, attributeReferences=attrRefs)
       
recordData = session.dataExportService.GetRecordAttributesByRef(request).recordData

```

Print the values of the attributes from the first 5 exported records. Note that some records may not have values for all attributes.

```python
s = [None]*len(df2)
for attribute in attributes:
    for idx, record in enumerate(recordData):
        attrValue = next((x for x in record.attributeValues if x.attributeName == attribute), None)
        s[idx] = attrValue.pointDataType.points[0].value if attrValue else None
    df2[attribute] = s
    
df2.head()

```

    ShortName LongName Young's Modulus (11-axis) (normalized) Ultimate tensile strength (normalized) Baseline fiber volume Elastic Poisson's Ratio (12-plane)     0 LBJ8311A S-Glass Unitape S2/SP381, 3M, 0° tension, Spec... 48.428779 1556.643278 53.473 0.272   1 LBJ6213A S-Glass Unitape S2/SP381, 3M, 0° tension, Spec... 47.911673 1392.975515 53.473 0.266   2 LBJ4211A S-Glass Unitape S2/SP381, 3M, 0° tension, Spec... 48.028883 1535.152318 53.473 0.242   3 LBJ4213A S-Glass Unitape S2/SP381, 3M, 0° tension, Spec... 48.042673 1601.486784 53.473 0.259   4 LBJ6214A S-Glass Unitape S2/SP381, 3M, 0° tension, Spec... 46.387931 1322.511090 53.473 0.264  

Create a plot of the exported values

```python
import matplotlib

df2.plot.scatter(x="Ultimate tensile strength (normalized)", y="Young's Modulus (11-axis) (normalized)", loglog=False,
                 c="Elastic Poisson's Ratio (12-plane)", colormap="afmhot", norm=matplotlib.colors.LogNorm(),
                 grid=True, figsize=(10, 7))

```

*Previous cell output:*

```output
<Axes: xlabel='Ultimate tensile strength (normalized)', ylabel="Young's Modulus (11-axis) (normalized)">

```

![png](/sites/default/files/git_ansys/granta_mi_scripting_toolkit_4_1_and_notebooks_1/Exporting_data_17_1.png)