Ces*_*dez 5 python sql-server stored-procedures pyodbc
这是我的第一个问题.所以,如果重复或格式化已关闭,我很抱歉.我搜索了其他问题,但错误很常见,但出现在多种情况中.
我有一个非常简单的python代码,我想在pyodbc中执行MSSQL中的过程.
import pyodbc
conn = pyodbc.connect(r'DSN=myDSN')
cursor = conn.cursor()
query = r'{call myproc}'
cursor.execute(query)
Run Code Online (Sandbox Code Playgroud)
我在读取ODBC使用调用来执行MSSQL中的过程后,使用调用而不是exec.
我得到的错误如下:
Traceback (most recent call last):
File "myscript.py", line 26, in <module>
cursor.execute(query)
pyodbc.ProgrammingError: ('42000', '[42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]The current transaction has aborted, and any pending changes have been rolled back. Cause: A transaction in a rollback-only state was not explicitly rolled back before a DDL, DML or SELECT statement. (111233) (SQLExecDirectW)')
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助
以下是有关如何通过 pyodbc 在 MS SQL Server 中执行存储过程的两个示例:
传递 NULL 和 VARCHAR 'tallen' 作为位置参数变量:
cursor.execute('EXEC usp_get_user_data ?, ?', None, 'flipperpa')
Run Code Online (Sandbox Code Playgroud)
将两个 VARCHAR 值作为命名参数变量传递:
cursor.execute('EXEC usp_get_user_data @user_full_name = ?, @user_username = ?', 'flip', 'flipperpa')
Run Code Online (Sandbox Code Playgroud)
然后循环遍历返回的数据:
rows = cursor.fetchall()
for row in rows:
# Do stuff
print(row.user_id)
Run Code Online (Sandbox Code Playgroud)
祝你好运!