Table 使用 pyodbc 的值参数被忽略
Table Valued Parameter using pyodbc is Ignored
正在尝试将数据发送到接受 Table 值参数的存储过程,它既不执行任何操作也不 returns 任何错误。
def InsertResults (self, dataset, name):
try:
sqlConn = self.sqlConnect()
with sqlConn.cursor() as cursor:
cursor.execute(f'CALL [dbo].[ImportAllocations] (?)', (dataset,))
result = cursor.fetchall()
print(result)
except AssertionError as error:
print(error)
finally:
print(f"Inserted data into {name}. Records inserted {len(dataset)}")
我的数据在 DataFrame 中格式正确。
这是存储过程header:
CREATE PROC [dbo].[ImportAllocations](@DataTable [dbo].[udt_Allocation] READONLY)
查看SQL Profiler,似乎忽略了调用。我按照以下 issue 尝试了一些其他简单示例,并且效果很好。
如果您不关闭游标并在执行后提交,就会发生这种情况。确保你做到了
cursor.close()
connection.commit()
在 运行 cursor.execute()
之后。
在存储过程中你必须确保添加了 SET NOCOUNT ON
否则你将不会得到任何返回到 Python
的结果
问题出在 pandas 数据框上。一旦转换为没有索引的单个元素的元组,这将起作用。
listTuple = list(dataset.itertuples(index=False))
cursor.execute(f'EXEC {name} ?', (listTuple,))
正在尝试将数据发送到接受 Table 值参数的存储过程,它既不执行任何操作也不 returns 任何错误。
def InsertResults (self, dataset, name):
try:
sqlConn = self.sqlConnect()
with sqlConn.cursor() as cursor:
cursor.execute(f'CALL [dbo].[ImportAllocations] (?)', (dataset,))
result = cursor.fetchall()
print(result)
except AssertionError as error:
print(error)
finally:
print(f"Inserted data into {name}. Records inserted {len(dataset)}")
我的数据在 DataFrame 中格式正确。
这是存储过程header:
CREATE PROC [dbo].[ImportAllocations](@DataTable [dbo].[udt_Allocation] READONLY)
查看SQL Profiler,似乎忽略了调用。我按照以下 issue 尝试了一些其他简单示例,并且效果很好。
如果您不关闭游标并在执行后提交,就会发生这种情况。确保你做到了
cursor.close()
connection.commit()
在 运行 cursor.execute()
之后。
在存储过程中你必须确保添加了 SET NOCOUNT ON
否则你将不会得到任何返回到 Python
问题出在 pandas 数据框上。一旦转换为没有索引的单个元素的元组,这将起作用。
listTuple = list(dataset.itertuples(index=False))
cursor.execute(f'EXEC {name} ?', (listTuple,))