我试图用pymssql在python中执行一个sql文件,这个文件包含一个BEGIN事务、一个COMMIT事务和一个END,以及前后的一些安全网。在
我正在尝试打开内存中的文件并执行内容:
file = open(options.sqlFile, 'r')
sqlFileContents = file.read()
file.close()
cursor.execute(sqlFileContents)
conn.commit()
但它会返回错误:
^{pr2}$所以基本上我有两个问题:
谢谢你的帮助。在
编辑:以下是SQL:
以下是SQL:
SET NUMERIC_ROUNDABORT OFF
GO
SET ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT, QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE id=OBJECT_ID('tempdb..#tmpErrors')) DROP TABLE #tmpErrors
GO
CREATE TABLE #tmpErrors (Error int)
GO
SET XACT_ABORT ON
GO
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
GO
BEGIN TRANSACTION
PRINT N'Adding Release Version to [admin].[ReleaseHistory]'
GO
INSERT INTO [admin].[ReleaseHistory] VALUES (GetUTCDate(), '1.7')
GO
IF @@ERROR<>0 AND @@TRANCOUNT>0 ROLLBACK TRANSACTION
GO
IF @@TRANCOUNT=0 BEGIN INSERT INTO #tmpErrors (Error) SELECT 1 BEGIN TRANSACTION END
GO
IF EXISTS (SELECT * FROM #tmpErrors) ROLLBACK TRANSACTION
GO
IF @@TRANCOUNT>0 BEGIN
PRINT 'The database update succeeded'
COMMIT TRANSACTION
END
ELSE PRINT 'The database update failed'
GO
DROP TABLE #tmpErrors
GO
是的,这样做是可能的。 我经常这样做,在代码中硬编码SQL会更干净。在
你能把SQL添加到你的帖子里吗?可能有个混乱的角色。在
我是这样做的(使用pyodbc):
编辑:删除所有
GO
它不是一个真正的SQL语句。 检查这个答案:Using "GO" within a transaction。在那就没事了。在
相关问题 更多 >
编程相关推荐