Прямой запуск SQL-запроса с PyRFC

Я новичок в Python .. Я хочу получить данные из системы SAP. Я создал соединение с системой SAP, используя приведенный ниже код и пытаюсь извлечь данные с помощью sql-запроса.

выберите col1, col2, col3 из table_name, где col1 = 2019

import pyrfc
from pyrfc import Connection

conn = Connection(ashost='myhost', sysnr='00', client='000', user='xxx', passwd='***')

fields = ['col1','col2','col3']

table = 'table_name'

where = ['col1=2019']

MaxRows =5

fromrow = 0

tables = conn.call("RFC_READ_TABLE", QUERY_TABLE=table, FIELDS = fields,OPTIONS=where,ROWCOUNT = MaxRows,ROWSKIPS=fromrow)

есть ли какой-либо прямой способ написать запрос sql (как мы пишем в oracle / sql). приведенный выше код предоставляет данные в форме dict и работает очень медленно.


person Sapna Basantani    schedule 10.06.2020    source источник


Ответы (1)


есть ли прямой способ написать запрос sql

нет. PyRFC не предназначен для прямых SQL-запросов, он может вызывать только существующие SAP RFC-модули.

Что касается функциональных модулей, которые питаются чистым SQL, посмотрите группы функций RSDU_SQL_XXX

введите описание изображения здесь

если мы говорим об Oracle DB, то это RSDU_EXEC_SQL_ORA модуль и RSDU_EXEC_SQL общий.

Однако они не являются RFC, поэтому не могут использоваться с PyRFC без некоторых изменений, поэтому вам нужен разработчик ABAP, иначе вам не повезло.

person Suncatcher    schedule 10.06.2020
comment
спасибо .. просто нужна еще одна информация .. Если мне нужно выбрать все столбцы из таблицы, что указать в переменной Fields. Если я даю пустой, он запрашивает список. Также как задать множественное условие where с помощью AND. - person Sapna Basantani; 10.06.2020
comment
Я также хочу запустить этот оператор: выберите * из таблицы, где col1 = значение и col2 = значение и col3 = значение, которое я написал: fields = [''] table = 'table' where = ['col1 = value and col2 = value and col3 = value '] ABAPApplicationError: RFC_ABAP_EXCEPTION (rc = 5): key = FIELD_NOT_VALID, message = Number: 000 [MSG: class =, type =, number = 000, v1-4: = ;;;] - person Sapna Basantani; 10.06.2020
comment
в ПОЛЯ следует передавать имена полей, а не пустой список. Есть несколько примеров RFC_READ_TABLE на SO, например этот < / а> - person Suncatcher; 08.10.2020