背景:使用pymssql模块操作mssqlserer数据库,前期测试 select,update语句都可以实现。
但在执行 BACKUP DATABASE [test] TO DISK = N'F:\sqlbackup\test.bak' 数据时提示,
File "pymssql.pyx", line 467, in pymssql.Cursor.execute (pymssql.c:7533)
pymssql.OperationalError: (3021, b'Cannot perform a backup or restore operation within a transaction.DB-Lib error message 20018, severity 16:\nGeneral SQL Server error: Check messages from the SQL Server\nDB-Lib error message 20018, severity 16:\nGeneral SQL Server error: Check messages from the SQL Server\n')
报错的大概意思就是不能够把backup 和 restore 放入到事务中执行,原因大概是因为backup 和 restore 没有回滚操作。
最终解决方案是 在cur 执行时 指定 autocommit(True)
执行完后 设置 autocommit(false)
这样可以解决
cur = self._GetConnect() #self.conn.autocommit(True) cur.execute(sql) #elf.conn.autocommit(False) self.conn.commit() self.conn.close()