Python pyodbc BACKUP DATABASE TO DISK 添加默认 MSSQL 备份路径

问题描述 投票:0回答:1

我正在编写Python来将MS SQL数据库备份到不同的服务器。当我将 //remoteServer/share/filename 放入命令中时,我得到:

pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC SQL Server 驱动程序] [SQL Server] 无法打开备份设备“E:\Data\MSSQL15.MSSQLSERVER\MSSQL\Backup\REMOTESERVER\SHARE oobar.bak”。 操作系统错误3(系统找不到指定的路径。)。 (3201) (SQLExecDirectW); [42000] [Microsoft][ODBC SQL Server 驱动程序][SQL Server]BACKUP DATABASE 异常终止。 (3013)")

Windows 10 上的 Python 3.10.13、pyodbc 5.0.1

SQLServer SQL Server Express 15.0.2104

远程服务器 Windows Server 2019。共享权限包括 SQL Server 的主机名

当我从命令中删除 //remoteserver/share/ 时

backup_command = """BACKUP DATABASE BaseData TO DISK = 'foobar.bak';"""
它运行,但文件最终位于默认备份位置(废话)。此外,当从 SSMS 运行并连接到 SQLServer 时,
BACKUP DATABASE BaseData TO DISK = '\\REMOTESERVER\SHARE\foobar.bak'
也可以工作。如何让它停止添加默认备份路径?

import pyodbc

# Connection parameters
server = 'SQLServer'
database = 'BaseData'
username = 'User'
password = 'Password'

# Create a connection object
conn = pyodbc.connect('DRIVER={SQL Server};SERVER=' + server + ';DATABASE=' + database + ';UID=' + username + ';PWD=' + password)
conn.autocommit = True
# Create a cursor object
cursor = conn.cursor()
# ---------------------------------------------------------------------------------------------------------------------------------
# Backup command 
backup_command = """BACKUP DATABASE BaseData TO DISK = '//REMOTESERVER/SHARE/foobar.bak';"""

# Execute the backup command
cursor.execute(backup_command)
#process return so that does not error
while (cursor.nextset()):
    pass

这篇文章的情况相同,除了错误不同。

python path backup pyodbc default
1个回答
0
投票

感谢@Gord Thompson,我受到启发而做出了它:

backup_command = """BACKUP DATABASE BaseData TO DISK = '\\\\REMOTESERVER\\SHARE\\foobar.bak';"""

对于 Python,\ 必须用另一个 \ 进行转义。 虽然超出了这个问题的范围,但为了获得在 REMOTESERVER 上工作的权限,我必须将 SQL Server 的主机名添加到共享文件夹共享安全性。

© www.soinside.com 2019 - 2024. All rights reserved.