मेरे प्रश्न के लिए टिप्पणियों के आधार पर मैं तालिका मूल्यवान पैरामीटर के साथ चलने वाली संग्रहीत प्रक्रिया प्राप्त करने में कामयाब रहा हूं (और एसपी से वापसी मान प्राप्त करें) अंतिम स्क्रिप्ट इस प्रकार है:
import pandas as pd
import pytds
from pytds import login
import sqlalchemy as sa
from sqlalchemy import create_engine
import sqlalchemy_pytds
def connect():
return pytds.connect(dsn='ServerName',database='DBName',autocommit=True, auth=login.SspiAuth())
engine = sa.create_engine('mssql+pytds://[ServerName]', creator=connect)
conn = engine.raw_connection()
with conn.cursor() as cur:
arg = [["foo.ExternalInput","bar.ExternalInput"]]
tvp = pytds.TableValuedParam(type_name="core.MatchColumnTable", rows=arg)
cur.execute("EXEC test_proc @Target = N'[dbname].[tablename1]', @Source = N'[dbname].[table2]', @CleanTarget = 0, @UseColumnsFromTarget = 0, @MergeOnColumn = %s", (tvp,))
result = cur.fetchall()
print(result)
कनेक्शन में ऑटोकॉमिट जोड़ा जाता है (कर्सर में लेनदेन करने के लिए), तालिका मान पैरामीटर (मार्च कॉलमटेबल) 2 कॉलम की अपेक्षा करता है, इसलिए तर्क को 2 कॉलम फिट करने के लिए संशोधित किया जाता है।
टीवीपी के अलावा आवश्यक पैरामीटर निष्पादन स्ट्रिंग में शामिल हैं। निष्पादन स्ट्रिंग में अंतिम परम tvp पैरामीटर (मर्जऑनकॉलम) का नाम है जो tvp से भरा होता है।
वैकल्पिक रूप से आप pytds दस्तावेज़ीकरण में वर्णित परिणाम स्थिति या पंक्ति गणना जोड़ सकते हैं:https://python-tds.readthedocs.io/en/latest/index.html
ध्यान दें! :संग्रहीत कार्यविधि में आपको यह सुनिश्चित करना होगा कि theSET NOCOUNT ON जोड़ा गया है अन्यथा आपको Python पर कोई परिणाम वापस नहीं मिलेगा