Pyodb c не может выполнить pro c в SQL Server 2008 - PullRequest
0 голосов
/ 20 февраля 2020

Контекст: У меня есть функция Python, которая должна подключаться к SQL Server 2008 через Pyodb c и выполнять хранимую процедуру, которая анализирует файл XML и загружает его в стол. Я использую Python 3.8.1 и установил обновленный драйвер ODB C (ODB C Драйвер 13.1)

Вот функция Pyhton:

import pyodbc

def load_to_database():
    username = 'REDACTED'
    password = 'REDACTED'

    connection = pyodbc.connect("Driver={ODBC Driver 13 for SQL Server};"
                        "Server=REDACTED;"
                        "Database=REDACTED;"
                        "Username="+username+";"
                        "Password="+password+";"
                        "Trusted_Connection=yes;")
    connection_cursor = connection.cursor()

    executesp = """EXEC [REDACTED].[dbo].[get_cp_api_data_part_search]"""
    connection.autocommit = True
    connection_cursor.execute(executesp)
    connection.close()
load_to_database()

Проблема: Сценарий Python успешно подключается к базе данных и выполняется без ошибок. НО, когда я проверяю базовую таблицу базы данных, данные не были загружены, что для меня означает, что хранимая процедура не выполняется. Когда я запускаю хранимую процедуру вручную, она запускается без каких-либо проблем и загружает данные.

Вопросы: Может ли кто-нибудь помочь с советами по устранению неполадок и помочь мне понять, почему процедура не выполняется? Я полагаю, что это возможно, процедура выполняется, но по какой-то причине не все SQL могут быть запущены? Или, возможно, курсор выходит / возвращается после выполнения вызовов процедуры C в процедуре?

Вот хранимая процедура на SQL сервере:

IF OBJECT_ID('tempdb..##search') IS NOT NULL DROP TABLE ##earch

DECLARE @xml_data XML

--Use OPENROWSET to extract the data from the xml file. 
SELECT @xml_data=O
FROM OPENROWSET(BULK N'C:\Users\eb\Desktop\Important Docs & Links\Important Documents\xml_data_removed_tags.xml', SINGLE_BLOB) as file_output(O)

--Variable below will be used to create a recognizeable XML document within SQL Server memory
DECLARE @xml_doc int

--Procedure below takes 2 parameters: 1) output parameter to store handle to xml document and 2) the xml document itself 
EXEC sp_xml_preparedocument @xml_doc OUTPUT, @xml_data

--Function below parses the XML based on the hierarchy path used, list the attributes and elements you want to query
--Queried into temptable
SELECT *
INTO ##search
FROM OPENXML(@xml_doc,'REDACTED/*',2)
WITH (
        REDACTED nvarchar(10),
        REDACTED int, 
        REDACTED int, 
        REDACTED nvarchar(60),
        REDACTED nvarchar(10), 
        REDACTED int, 
        REDACTED nvarchar(30),
        REDACTED nvarchar(20),
        REDACTED nvarchar(20), 
        REDACTED int, 
        REDACTED nvarchar(5), 
        REDACTED nvarchar(5), 
        REDACTED int, 
        REDACTED nvarchar(50)'REDACTED',
        REDACTED nvarchar(25)'REDACTED',
        REDACTED int 'REDACTED', 
        REDACTED nvarchar(60) 'REDACTED', 
        REDACTED int 'REDACTED', 
        REDACTED nvarchar(50) 'REDACTED', 
        REDACTED nvarchar(20) 'REDACTED'
        )

--This procedure removes the saved prepared xml document 

1 Ответ

0 голосов
/ 20 февраля 2020

@ Parfait, вы правы - проблема, кажется, решается при использовании обычной таблицы вместо временной таблицы.

...