2017-02-27 9 views
1

파이썬 스크립트와 Pyodbc 모듈을 사용하여 호출하는 저장 프로 시저가 있습니다. 코드는 다음과 같습니다파이썬으로 저장 프로 시저 출력을 캡처 pyodbc

import pyodbc 
pyodbc.pooling=False 
oConnexion = pyodbc.connect("driver={Teradata};dbcname=myServer;DefaultDatabase=myDB;uid=myUser;pwd=myPassword;charset=utf8;", autocommit=True) 
oConnexion.setdecoding(pyodbc.SQL_CHAR, encoding='utf-8') 
oConnexion.setdecoding(pyodbc.SQL_WCHAR, encoding='utf-8') 
oConnexion.setencoding(encoding='utf-8') 
oCursor = oConnexion.cursor() 
oQueryRegisterBatch = "CALL DEV_AUDIT.SP_AUDIT_BATCH('ED_DATA_QUALITY_MANUAL', 'REGISTER', '1900-01-01 00:00:00.000000', '2999-12-31 00:00:00.000000');" 
oCursor.execute(oQueryRegisterBatch) 
for row in oCursor: 
    print (row) 

저장 프로 시저가 새 레코드를 생성하고 레코드 ID (BATCH_KEY)를 반환합니다. Teradata에서 저장 프로 시저를 실행할 때 올바르게 BATCH_KEY를 반환하지만 파이썬에서 캡처 할 수는 없습니다. 내가 대신 값의 다음과 같은 오류 메시지가 :

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
pyodbc.ProgrammingError: No results. Previous SQL was not a query. 

내가 저장 프로 시저를 호출 한 후 테이블에 쿼리하여 BATCH_KEY를 검색 할 수 있지만하지 않도록하고 싶습니다. 저장 프로 시저의 출력을 캡처하는 방법을 알려주십시오.

감사

pyodbc 패키지의 문서 당으로
+0

pyodbc Wiki 페이지 [https://github.com/mkleehammer/pyodbc/wiki/Calling-Stored-Procedures]는 익명 코드 블록을 사용하여 SQL Server에서이를 수행하는 방법을 보여줍니다. Teradata에서 SQL 구문을 미세 조정하여 유사한 접근법을 사용할 수 있습니다. –

답변

1

, 저장 프로 시저의 출력을 캡처 할 수 없습니다. 여기에 설명되어 있습니다 : https://github.com/mkleehammer/pyodbc/wiki/Calling-Stored-Procedures

pyodbc는 현재 선택적 .callproc 메소드를 구현하지 않습니다.

데이터베이스 엔진에 따라 저장 프로 시저 호출을 쿼리에 포함시키는 해결 방법이 있습니다.

우리는 출력 매개 변수의 값을 검색 에 대한 해결 방법을 사용하고 값을 반환해야 .callproc pyodbc이 없기 때문에. 특정 방법은 특정 ODBC 드라이버 이 무엇인지에 따라 다르지만 SQL Server 용 Microsoft ODBC 드라이버의 경우 EXEC 저장 프로 시저에 "익명 코드 블록"을 사용하고 출력 매개 변수 및/또는 반환 값을 으로 선택할 수 있습니다. .

위의 링크에서 자세한 내용을 참조하십시오.