Querying SAP database using Python

Python is one of the most widely used object-oriented programming languages, known for its simplicity and readability. When working with enterprise systems, connecting Python to SAP databases is a common requirement for data extraction and analysis.

To connect Python with SAP systems, we need to install the PyRFC module, which provides Python bindings for SAP Remote Function Calls (RFC). This module enables seamless communication between Python applications and SAP systems.

Installing PyRFC

Before querying SAP databases, you need to install the PyRFC package and SAP NetWeaver RFC Library ?

pip install pyrfc

Note: You also need to download and install the SAP NetWeaver RFC Library from the SAP Support Portal, as PyRFC depends on it.

Establishing SAP Connection

First, establish a connection to your SAP system using connection parameters ?

from pyrfc import Connection

# SAP connection parameters
conn_params = {
    'ashost': 'your_sap_server',
    'sysnr': '00',
    'client': '100',
    'user': 'your_username',
    'passwd': 'your_password',
    'lang': 'EN'
}

# Establish connection
conn = Connection(**conn_params)
print("Connected to SAP system")

Querying SAP Tables Using RFC_READ_TABLE

The RFC_READ_TABLE function module is the primary method for reading data from SAP tables ?

from pyrfc import Connection

def query_sap_table(connection, table_name, fields=None, max_rows=100):
    """
    Query SAP table using RFC_READ_TABLE
    """
    options = []
    
    # Prepare field list
    if fields:
        field_list = [{'FIELDNAME': field} for field in fields]
    else:
        field_list = []
    
    # Call RFC_READ_TABLE
    result = connection.call('RFC_READ_TABLE',
                           QUERY_TABLE=table_name,
                           DELIMITER='|',
                           FIELDS=field_list,
                           ROWCOUNT=max_rows)
    
    return result

# Example: Query customer master data
conn = Connection(**conn_params)
result = query_sap_table(conn, 'KNA1', ['KUNNR', 'NAME1', 'LAND1'], 10)

# Process results
for row in result['DATA']:
    print(row['WA'])

conn.close()

Processing Query Results

SAP returns data in a specific format that needs to be processed into usable Python structures ?

import pandas as pd

def process_sap_data(sap_result, delimiter='|'):
    """
    Convert SAP RFC_READ_TABLE result to pandas DataFrame
    """
    # Extract field names
    fields = [field['FIELDNAME'] for field in sap_result['FIELDS']]
    
    # Extract and split data rows
    data_rows = []
    for row in sap_result['DATA']:
        data_rows.append(row['WA'].split(delimiter))
    
    # Create DataFrame
    df = pd.DataFrame(data_rows, columns=fields)
    return df

# Process the results
result = query_sap_table(conn, 'MARA', ['MATNR', 'MATKL', 'MEINS'], 50)
df = process_sap_data(result)
print(df.head())

Advanced Filtering

You can add WHERE conditions to filter data directly in SAP ?

def query_with_filter(connection, table_name, where_conditions, fields=None):
    """
    Query SAP table with WHERE conditions
    """
    options = []
    
    # Add WHERE conditions
    for condition in where_conditions:
        options.append({'TEXT': condition})
    
    field_list = [{'FIELDNAME': field} for field in fields] if fields else []
    
    result = connection.call('RFC_READ_TABLE',
                           QUERY_TABLE=table_name,
                           DELIMITER='|',
                           OPTIONS=options,
                           FIELDS=field_list,
                           ROWCOUNT=1000)
    
    return result

# Example with filter
where_conditions = ["LAND1 = 'US'", "AND KUNNR LIKE '1000%'"]
filtered_result = query_with_filter(conn, 'KNA1', where_conditions, 
                                  ['KUNNR', 'NAME1', 'LAND1'])

Key Considerations

  • Performance: RFC_READ_TABLE has limitations on row count and field width
  • Authorization: Ensure proper SAP authorizations for table access
  • Data Types: SAP data types need proper conversion in Python
  • Connection Management: Always close connections to free resources

Web Services Integration

PyRFC also supports bidirectional communication, allowing you to call Python functions from ABAP modules or create web services. SAP NetWeaver fully supports both stateful and stateless web services for enterprise integration.

Conclusion

PyRFC provides powerful capabilities for querying SAP databases using Python. The RFC_READ_TABLE function module is the standard method for data extraction, though it requires proper connection setup and result processing for effective use.

Updated on: 2026-03-24T18:11:55+05:30

1K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements