Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Python wywołuje procedurę składowaną sql-server z parametrem o wartości tabeli

Na podstawie komentarzy do mojego pytania udało mi się uruchomić procedurę składowaną z parametrami o wartości tabeli (i uzyskać wartości zwracane z SP) Ostateczny skrypt wygląda następująco:

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)

Autocommit jest dodawany w połączeniu (aby zatwierdzić transakcję w kursorze), parametr wartości tabeli (marchcolumntable) oczekuje 2 kolumn, więc arg jest modyfikowany, aby pasował do 2 kolumn.

Parametry wymagane oprócz tvp są zawarte w ciągu znaków exec. Ostatnim parametrem w ciągu wykonania jest nazwa parametru tvp (kolumna scalająca), który jest wypełniany przez tvp.

opcjonalnie możesz dodać status wyniku lub liczbę wierszy zgodnie z opisem w dokumentacji pytds:https://python-tds.readthedocs.io/en/latest/index.html

Uwaga! :w procedurze składowanej musisz upewnić się, że dodano opcję SET NOCOUNT ON, w przeciwnym razie nie otrzymasz żadnych wyników z powrotem do Pythona



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 5 sposobów na zwracanie wierszy zawierających małe litery w SQL Server

  2. Walidacja e-mail TSQL (bez wyrażenia regularnego)

  3. Użyj DATABASEPROPERTYEX(), aby zwrócić ustawienia bazy danych w SQL Server

  4. Pobierz obraz z bazy danych w asp.net

  5. Dlaczego dostrajanie wydajności SQL jest najważniejszą umiejętnością zarządzania bazą danych?