gpt4 book ai didi

python - pyodbc 失败且没有错误

转载 作者:行者123 更新时间:2023-11-30 23:08:42 26 4
gpt4 key购买 nike

如果有人能指出我正确的方向,我会很感兴趣。

我有一个很长的存储过程(其中还包含对其中其他存储过程的调用),用于更新各种表。

如果我在管理工作室中运行存储过程,它运行良好。如果我从 pyodbc 调用它,那么:

  1. 它的运行时间与平常相同
  2. 我没有收到任何错误
  3. 没有任何要更新的表得到更新

我一直运行 pyodbc 来执行存储过程,没有任何问题 - 我知道我的连接或调用没有任何问题,就好像我在 python 代码中替换了一个较短的存储过程一样,它可以正常工作。

存储过程确实生成了一些“警告:空值被聚合或其他 SET 操作消除”消息,我认为这些可能会导致问题,但每当我尝试 SET ANSI_WARNINGS { ON | OFF } 无论是在存储过程内部还是在存储过程外部,我得到了 pyodbc.ProgrammingError

对这个问题有什么猜测吗?

Python 3.4 (have the same problem in 2.7), MSSQL, Windows 7

更新:

import pyodbc as p

def getconn():
server='insertsqlservername'
dbase='insertdbasename'
connStr=('Driver={SQL Server};SERVER=' +
server + ';DATABASE=' + dbase + ';' +
'trusted=1')
conn = p.connect(connStr)
return conn

def runSQL():
conn=getconn()
cursor=conn.cursor()

try:
cursor.execute('exec InsertStoredProcName')
conn.commit()
except:
print('sys.exc_info()[0])

cursor.close()
conn.close()

要 100% 解决问题,似乎有两个组成部分:

  • Python 代码:如果我使用相同的 python 代码,但将存储过程更改为不同的,则 python 代码可以工作
  • SQL 代码:“问题”存储过程在 T-SQL 中有效,但在 pyodbc 中运行时无效

这似乎是两者的结合。

最佳答案

您可以包含您的 pyodbc 连接字符串吗?听起来您在连接时没有设置自动提交,这会导致您所做的更改在连接关闭时回滚。如果是这种情况,您有两种选择。首先,您可以在连接时将自动提交设置为打开:

conn = pyodbc.connect(connection_str, autocommit=True)

或者,在关闭连接之前:

conn.commit()

关于python - pyodbc 失败且没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31606658/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com