【发布时间】:2016-09-13 19:01:08
【问题描述】:
我有一个从 Sql 服务器运行时可以 100% 工作的存储过程。它更新至少 5 个不同的表。当我从 Python 运行它时,它只更新前两个表。未在其余表上完成。传递的参数与直接从 sql server 运行完全一样。每次测试都会将数据重置到一个共同的起点。有没有人在 Python 执行存储过程时遇到过这个问题?我在不到一个月前使用 Python 3.5 和 Pyodbc,Windows 上的 Sql 2012 客户端和服务器。这不是提交问题,因为前两个表正在更新/提交。它失败的sql语句一点也不复杂。我猜是某种限制,比如时间,还是只用给定的 sql 调用更新这么多表?我的下一步是将 Python 中的每个步骤作为单独的步骤执行,而不是从一个单独的步骤中执行所有存储过程,以查看是否有任何差异,但我希望不必这样做。
str_rs_SqlCommand = "{call dbo.usp_LaborLogBatchPerson ('Test User', '1')}" ### Passes parameters to the stored procedure
print (str_rs_SqlCommand)
obj_dbc_Connection2 = pyodbc.connect("DRIVER={SQL Server} " + " ;SERVER=" + str_dbc_ServerName + " ;DATABASE=" + str_dbc_Name + " ;UID=" + str_dbc_Uid + " ;PWD=" + str_dbc_Pwd + "" + "" ) #;autocommit=True #tried with and without autocommit
conn = obj_dbc_Connection2.cursor() ### Create a cursor for the sql connection
conn.execute(str_rs_SqlCommand)
conn.commit()
obj_dbc_Connection2.close
【问题讨论】:
-
不提供任何代码,我不确定您期待什么样的帮助...
-
代码是从命令行而不是网络运行的,所以就我熟悉这些技术协同工作而言,应该没有超时问题。如果有人在从命令行运行时遇到超时问题,请告诉我。
-
什么代码有用?带有大量插入/更新的存储过程。我说从 Sql 服务器运行时 proc 运行正确。所以不同的是当它通过 pyodbc 从 Python 运行时。
-
存储过程对您有帮助吗?运行部分存储过程的 Python 代码看起来与我执行其他不那么长且只做一件事的存储过程时没有什么不同。那工作很好。问题不在于代码不起作用。但它适用于某些存储过程,但不适用于其他存储过程。那些工作的只有一张表被更新。这个适用于 5 个以上的前 2 个。
-
我将首先显示调用该过程的 Python 代码部分。然后是 SQL 的任何相关部分(是否正在使用它们的事务等)。我知道您说这不是“提交问题”,但是您如何 100% 确定是这种情况?
标签: python sql-server-2012 pyodbc