如何使用Python中的存储过程将值插入到SQL Server表中

问题描述 投票:0回答:1

我是

pytds
的新手。将数据插入 SQL Server 时遇到
TypeError: not enough arguments for format string
问题。

我遇到的问题是:

回溯(最近一次调用最后一次): 文件“c:/Users/mydesk/Desktop/test/test_pytds.py”,第 64 行,位于 connect_and_call_stored_procedure(查询,val) 文件“c:/Users/mydesk/Desktop/test/test_pytds.py”,第 48 行,在 call_sproc 中 光标.执行(查询,(tvp,)) 文件“C:\Program Files (x86)\Python38-32\lib\site-packages\pytds_init_.py”,第 739 行,执行中 self.执行(操作,参数) 文件“C:\Program Files (x86)\Python38-32\lib\site-packages\pytds_init.py”,第 701 行,在 _execute 中 操作 = 操作 % 名称[0] 类型错误:格式字符串参数不足

我错过了一些事情。让我知道您的宝贵意见。

我的完整代码:

import pytds 
def get_query() -> str:
    sql = '''
        DECLARE @tbl [dbo].[tbl]
        insert into @tbl
        (
            col1, col2, col3
        )
        values (%s,%s,%s)
    '''  
    query += '''
         EXECUTE [dbo].[stproc] 
         @tbl
    '''
    return sql

def call_sproc(query, val):
    server = 'my_server'
    user = 'my_user'
    password = 'secret'
    database = 'my_db'
    
    try:
        conn = pytds.connect(server=server, user=user, password=password, database=database)
        cursor = conn.cursor()

        tvp = pytds.TableValuedParam(type_name='dbo.tbl', rows=val)

        cursor.execute(query, (tvp,))

        conn.commit()

        cursor.close()
        conn.close()

    except pytds.Error as e:
        print("Connection issue:", e)

###
val=[('col1_val'), ('col2_val'), ('col3_val')]
my_sql = get_query()
call_sproc(my_sql, val)
python sql-server table-valued-parameters sqlalchemy-pytds
1个回答
0
投票

要调用存储过程,不需要任何查询或

DECLARE
。只需按照文档所说的操作并使用 callproc
cursor.callproc("dbo.stproc", (tvp,))

或者,如果您确实想使用临时批处理,那么就这样做

cursor.execute("EXECUTE dbo.stproc %s", (tvp,))

© www.soinside.com 2019 - 2024. All rights reserved.