51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

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

英文:

How to insert values into SQL Server table using Stored procedure in Python

问题 {#heading}

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

我遇到的问题是:

追踪回溯(最近的调用最后):
文件 "c:/Users/mydesk/Desktop/test/test_pytds.py",第 64 行,在 中
connect_and_call_stored_procedure(query, val)
文件 "c:/Users/mydesk/Desktop/test/test_pytds.py",第 48 行,在 call_sproc 中
cursor.execute(query, (tvp,))
文件 "C:\Program Files (x86)\Python38-32\lib\site-packages\pytds_ init .py",第 739 行,在 execute 中
self. *execute(operation, params) 文件 "C:\Program Files (x86)\Python38-32\lib\site-packages\pytds
init* .py",第 701 行,在 _execute 中
operation = operation % names[0]
TypeError: not enough arguments for format string

我漏掉了什么。请提供您宝贵的意见。

我的完整代码:

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 + query

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)

英文:

I am new to pytds. Facing TypeError: not enough arguments for format string issue while inserting data into SQL Server.

Issue I am getting is:
> Traceback (most recent call last):
> File "c:/Users/mydesk/Desktop/test/test_pytds.py", line 64, in <module>
> connect_and_call_stored_procedure(query, val)
> File "c:/Users/mydesk/Desktop/test/test_pytds.py", line 48, in call_sproc
> cursor.execute(query, (tvp,))
> File "C:\Program Files (x86)\Python38-32\lib\site-packages\pytds_init .py", line 739, in execute
> self.*execute(operation, params) > File "C:\Program Files (x86)\Python38-32\lib\site-packages\pytds
init* .py", line 701, in _execute
> operation = operation % names[0]
> TypeError: not enough arguments for format string

Something I missed. Let me know your valuable inputs.

My complete code:

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

def call_sproc(query, val):
server = \&#39;my_server\&#39;
user = \&#39;my_user\&#39;
password = \&#39;secret\&#39;
database = \&#39;my_db\&#39;


    try:
        conn = pytds.connect(server=server, user=user, password=password, database=database)
        cursor = conn.cursor()

        tvp = pytds.TableValuedParam(type_name=&amp;#39;dbo.tbl&amp;#39;, rows=val)

        cursor.execute(query, (tvp,))

        conn.commit()

        cursor.close()
        conn.close()

    except pytds.Error as e:
        print(&amp;quot;Connection issue:&amp;quot;, e)




`val=[(&#39;col1_val&#39;), (&#39;col2_val&#39;), (&#39;col3_val&#39;)]
my_sql = get_query()
call_sproc(my_sql, val)
`

答案1 {#1}

得分: -1

调用存储过程时,无需任何查询或DECLARE。只需按照文档中的说明使用callproc即可。

cursor.callproc("dbo.stproc", (tvp,))

或者,如果您真的想使用临时批处理,则可以执行以下操作:

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

英文:

To call a stored procedure, you don't need any query or DECLARE. Just do what the docs say and use callproc

cursor.callproc(&quot;dbo.stproc&quot;, (tvp,))

Or if you really want to use an ad-hoc batch then do

cursor.execute(&quot;EXECUTE dbo.stproc %s&quot;, (tvp,)) 

赞(1)
未经允许不得转载:工具盒子 » 如何在Python中使用存储过程将值插入到SQL Server表中