sql >> データベース >  >> RDS >> Sqlserver

Pythonは、テーブル値パラメーターを使用してsql-serverストアドプロシージャを呼び出します

    私の質問へのコメントに基づいて、テーブル値のパラメーターを使用してストアドプロシージャを実行することができました(そしてSPからの戻り値を取得しました)。最終的なスクリプトは次のとおりです。

    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)
    

    自動コミットは接続に追加され(カーソルでトランザクションをコミットするため)、テーブル値パラメーター(marchcolumntable)は2列を想定しているため、argは2列に合うように変更されます。

    tvp以外に必要なパラメーターは、exec文字列に含まれています。実行文字列の最後のパラメーターは、tvpで埋められるtvpパラメーター(mergeoncolumn)の名前です。

    オプションで、pytdsドキュメントに記載されている結果ステータスまたは行数を追加できます:https://python-tds.readthedocs.io/en/latest/index.html

    注意! :ストアドプロシージャでは、SET NOCOUNT ONが追加されていることを確認する必要があります。追加されていない場合、Pythonに結果が返されません



    1. psqlを使用してPostgreSQLでデータベースとテーブルを一覧表示する方法

    2. [ビデオ]PostgreSQLのJSONデータ型の紹介

    3. 関係のために許可が拒否されました

    4. T-SQLのPRINTステートメント