如何使用 gzip basXml 作为 python 格式反编译 SAP ERP 中的 blob 字段

问题描述 投票:0回答:1

如何使用 gzip basXml 作为 python 格式反编译 SAP ERP 中的 blob 字段?就我而言,我想从 ODQDATA 表中读取“xdata”字段。

我尝试使用 gzip 和 zlib 解压该对象,但没有成功(BadGzipFile:不是 gzip 压缩文件)。我自己也没什么想法了。

    import zlib
    import gzip
    import base64
    
    jdbcHostname = "xxx"
    jdbcPort = "xx"
    jdbcUrl = f"jdbc:sap://{jdbcHostname}:{jdbcPort}"
    
    jdbcUsername = "xx"
    jdbcPassword = "xx"
    
    query="SELECT * FROM SAPHANADB.ODQDATA LIMIT 1"
    
    df = spark.read \
            .format("jdbc") \
            .option("url", jdbcUrl) \
            .option("query", query) \
            .option("driver", "com.sap.db.jdbc.Driver") \
            .option("user", jdbcUsername) \
            .option("password", jdbcPassword) \
            .load()
    
    #for row in df.collect():
    for row in df.collect():
        blob_data = row["XDATA"]
        data = gzip.decompress blob_data)
python gzip binary-data sap odp
1个回答
0
投票

尝试一下

import gzip
import base64
import pyspark
import xml.etree.ElementTree as ET

jdbcHostname = "xxx"
jdbcPort = "xx"
jdbcUrl = f"jdbc:sap://{jdbcHostname}:{jdbcPort}"

jdbcUsername = "xx"
jdbcPassword = "xx"

query="SELECT * FROM SAPHANADB.ODQDATA LIMIT 1"

spark = pyspark.sql.SparkSession.builder.getOrCreate()

df = spark.read \
        .format("jdbc") \
        .option("url", jdbcUrl) \
        .option("query", query) \
        .option("driver", "com.sap.db.jdbc.Driver") \
        .option("user", jdbcUsername) \
        .option("password", jdbcPassword) \
        .load()

for row in df.collect():
    blob_data = row["XDATA"]
    decoded_data = base64.b64decode(blob_data)
    decompressed_data = gzip.GzipDecompressor().decompress(decoded_data)
    xml_tree = ET.fromstring(decompressed_data)
    xdata = xml_tree.find("xdata").text
    print(xdata)
© www.soinside.com 2019 - 2024. All rights reserved.