Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Python memanggil prosedur tersimpan sql-server dengan parameter bernilai tabel

Berdasarkan komentar untuk pertanyaan saya, saya telah berhasil menjalankan prosedur tersimpan dengan parameter bernilai tabel (dan mendapatkan nilai pengembalian dari SP) Skrip terakhir adalah sebagai berikut:

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 ditambahkan dalam koneksi (untuk melakukan transaksi di kursor), parameter nilai tabel (marchcolumntable) mengharapkan 2 kolom, sehingga arg dimodifikasi agar sesuai dengan 2 kolom.

Parameter yang diperlukan selain tvp termasuk dalam string exec. Param terakhir pada string execute adalah nama parameter tvp(mergeoncolumn) yang diisi dengan tvp.

opsional, Anda dapat menambahkan status hasil atau jumlah baris seperti yang dijelaskan dalam dokumentasi pytds:https://python-tds.readthedocs.io/en/latest/index.html

Perhatikan! :dalam prosedur tersimpan Anda harus memastikan bahwa SET NOCOUNT ON ditambahkan jika tidak, Anda tidak akan mendapatkan hasil apa pun kembali ke Python



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pemicu SQL Server:Pemicu DML

  2. Cara Mengaktifkan semua Batasan Pemeriksaan di Database SQL Server - Tutorial SQL Server / TSQL Bagian 88

  3. Pengumpulan di SQL Server

  4. Memindahkan Tabel SQL Server ke Filegroup Berbeda

  5. Bagaimana cara menghindari satu kutipan di SQL Server?