cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

How to use Python to store SAP interface data into MSSQL

Dylan_lin
Newcomer
270

I have a SAP SOAP interface that I want to be able to store in the database.Can be parsed successfully but cannot be stored in the database smoothly.Plese help

 

------------------------------------------------------------------------------

import requests
import pyodbc
import xml.etree.ElementTree as ET

headers = {
    'Accept-Encoding': 'gzip,deflate',
    'Content-Type': 'text/xml;charset=UTF-8',
    'SOAPAction': 'urn:sap-com:document:sap:soap:functions:mc-style:Z_cE01_SALES_INFO:Zce01SalesInfoRequest',
    'Host': 'XX.XX.XX.XX:XXXX',
    'Connection': 'Keep-Alive',
    'User-Agent': 'Apache-HttpClient/4.5.5 (Java/16.0.2)'
}

xml_body = '''
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:sap-com:document:sap:soap:functions:mc-style">
   <soapenv:Header/>
   <soapenv:Body>
      <urn:cPe01SalesInfo>
         <EsKhjq1>
            <item>
               <DatumFrom>2024-05-01</DatumFrom>
               <DatumTo>2024-05-30</DatumTo>
            </item>
         </EsKhjq1>
         <EsKhjq2>
            <item>
               <DatumFrom></DatumFrom>
               <DatumTo></DatumTo>
            </item>
         </EsKhjq2>
         <EsKhjq3>
            <item>
               <DatumFrom></DatumFrom>
               <DatumTo></DatumTo>
            </item>
         </EsKhjq3>
         <EsKhjq4>
            <item>
               <DatumFrom></DatumFrom>
               <DatumTo></DatumTo>
            </item>
         </EsKhjq4>
         <EsWadat>
            <item>
               <DatumFrom></DatumFrom>
               <DatumTo></DatumTo>
            </item>
         </EsWadat>
         <EsYcqj>
            <item>
               <DatumFrom></DatumFrom>
               <DatumTo></DatumTo>
            </item>
         </EsYcqj>
         <EtResult>
            <item>
               <Sort></Sort>
               <Period></Period>
               <Prctr></Prctr>
               <Vkgrp></Vkgrp>
               <Ktext></Ktext>
               <Bezei></Bezei>
               <Yye></Yye>
               <Szje></Szje>
               <Wjsze></Wjsze>
               <Syyce></Syyce>
               <Wzpyy></Wzpyy>
               <Wzpsz></Wzpsz>
               <Sosze></Sosze>
               <SumKwmeng></SumKwmeng>
               <SumLfimg></SumLfimg>
               <ReturnValue></ReturnValue>
            </item>
         </EtResult>
         <IvBukrs>AE01</IvBukrs>
         <IvDcmb></IvDcmb>
         <IvMimmb></IvMimmb>
         <IvWxmb></IvWxmb>
         <IvZlmb></IvZlmb>
      </urn:Zce01SalesInfo>
   </soapenv:Body>
</soapenv:Envelope>
'''


if response.status_code == 200:

    root = ET.fromstring(response.text)
    data = []
    for item in root.findall('.//{urn:sap-com:document:sap:soap:functions:mc-style}item'😞
        sort = item.find('{urn:sap-com:document:sap:soap:functions:mc-style}Sort').text
        period = item.find('{urn:sap-com:document:sap:soap:functions:mc-style}Period').text
        prctr = item.find('{urn:sap-com:document:sap:soap:functions:mc-style}Prctr').text
        vkgrp = item.find('{urn:sap-com:document:sap:soap:functions:mc-style}Vkgrp').text
        ktext = item.find('{urn:sap-com:document:sap:soap:functions:mc-style}Ktext').text
        bezei = item.find('{urn:sap-com:document:sap:soap:functions:mc-style}Bezei').text
        yye   = item.find('{urn:sap-com:document:sap:soap:functions:mc-style}Yye').text
        szje  = item.find('{urn:sap-com:document:sap:soap:functions:mc-style}Szje').text
        wjsze = item.find('{urn:sap-com:document:sap:soap:functions:mc-style}Wjsze').text
        syyce = item.find('{urn:sap-com:document:sap:soap:functions:mc-style}Syyce').text
        wzpyy = item.find('{urn:sap-com:document:sap:soap:functions:mc-style}Wzpyy').text
        wzpsz = item.find('{urn:sap-com:document:sap:soap:functions:mc-style}Wzpsz').text
        sosze = item.find('{urn:sap-com:document:sap:soap:functions:mc-style}Sosze').text
        sumKwmeng = item.find('{urn:sap-com:document:sap:soap:functions:mc-style}SumKwmeng').text
        sumLfimg = item.find('{urn:sap-com:document:sap:soap:functions:mc-style}SumLfimg').text
        returnValue = item.find('{urn:sap-com:document:sap:soap:functions:mc-style}ReturnValue').text
        data.append((sort, period, prctr, vkgrp, ktext, bezei, yye, szje, wjsze, syyce, wzpyy, wzpsz, sosze, sumKwmeng, sumLfimg, returnValue))


    print("print:")
    for row in data:
        print(row)
    print(response.text)

    if data:
   
        conn_str = (
            'DRIVER={SQL Server};'
            'SERVER=XX.XX.XX.XX;'  
            'DATABASE=test;'    
            'UID=user;'              
            'PWD=XXXXXXXX;'          
        )
        conn = pyodbc.connect(conn_str)
        cursor = conn.cursor()

 
        insert_sql = '''
        INSERT INTO test_20240515 (Sort, Period, Prctr, Vkgrp, Ktext, Bezei, Yye, Szje, Wjsze, Syyce, Wzpyy, Wzpsz, Sosze, SumKwmeng, SumLfimg, ReturnValue)
        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
        '''
        cursor.executemany(insert_sql, data)

   
        conn.commit()
        cursor.close()
        conn.close()
        print("completeTABLE test_20240515")
    else:
        print("nodata")
else:
    print(f"error!HTTPcode:{response.status_code}")

Accepted Solutions (0)

Answers (0)