So sichern Sie eine Datenbank mit pyodbc

Die backup-Anweisung kann nicht in einer Transaktion verwendet werden, wenn sie mit dem pyodbc-Cursor ausgeführt wird. Es scheint, dass der Pyodbc die Abfrage innerhalb einer Standardtransaktion ausführt. Ich habe auch versucht, den Autocommit-Modus zu verwenden oder die Festschreibungsanweisung vor der Sicherungsanweisung hinzuzufügen. Beides funktioniert nicht.

#can't execute the backup statement in transaction
cur.execute("backup database database_name to disk = 'backup_path'")
#not working too
cur.execute("commit;backup database database_name to disk = 'backup_path'")

Ist es möglich, die Backup-Anweisung von pyodbc auszuführen? Danke im Voraus!

----- Zusätzliche Informationen hinzugefügt ------------------------------------------ -----------------------------

Der Sicherungsvorgang ist in einer Funktion wie der folgenden gekapselt:

def backupdb(con, name, save_path):
    # with autocommit mode, should be pyodbc.connect(con, autocommit=True)
    con = pyodbc.connect(con) 
    query = "backup database %s to disk = '%s'" % (name, save_path)
    cur = con.cursor()
    cur.execute(query)
    cur.commit()
    con.close()

Wenn die Funktion durch folgenden Code aufgerufen wird,

backupdb('DRIVER={SQL Server};SERVER=.\sqlexpress;DATABASE=master;Trusted_Connection=yes',
             'DatabaseName',
             'd:\\DatabaseName.bak')

dann ist die Ausnahme:

File "C:/Documents and Settings/Administrator/Desktop/bakdb.py", line 14, in <module>'d:\\DatabaseName.bak')
File "C:/Documents and Settings/Administrator/Desktop/bakdb.py", line 7, in backupdb cur.execute(query)
ProgrammingError: ('42000', '[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Cannot perform a backup or restore operation within a transaction. (3021) (SQLExecDirectW); [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]BACKUP DATABASE is terminating abnormally. (3013)')

Wenn Sie das Schlüsselwort autocommit = True öffnen, wird die Funktion automatisch ausgeführt, es wird jedoch keine Sicherungsdatei im Sicherungsordner erstellt.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage