【发布时间】:2019-09-09 20:40:33
【问题描述】:
我目前正在尝试使用运行后台的 Python 3.7 应用程序自动备份数据库。我设法使用以下查询字符串备份数据库。
SQLCommand = ("sqlcmd -E -S %s -Q \"BACKUP DATABASE %s TO DISK=\'%s\%02d-%02d-%02d-%02d:%02d:%02d.bak\'\"" %
("MYSERVER\SQLSERVICE", "MyDatabase",
"C:\\Users\Malek\Documents\PYSQLBS\Backups",
CDT.year, CDT.month, CDT.day, CDT.hour, CDT.minute, CDT.second))
...
print(subprocess.Popen(SQLCommand, shell=True, stdout=subprocess.PIPE).stdout.read())
但是,我收到此错误。我 100% 确定文件夹 C:\Users\Malek\Documents\PYSQLBS\Backups 存在,因为我直接在命令行中测试了该命令,它运行良好。
消息 3201,级别 16,状态 1,服务器 MYSERVER\SQLSERVICE,第 1 行
无法打开备份设备 'C:\Users\Malek\Documents\PYSQLBS\Backups\2019-09 -09-16:24:46.bak'。操作系统错误 123(文件名、目录名或卷标语法不正确。)。
消息 3013,级别 16,状态 1,服务器 MYSERVER\SQLSERVICE, 1号线
BACKUP DATABASE 异常终止。
【问题讨论】:
-
请注意您使用的产品标签!这个问题是关于ms sql server,不是mysql!
-
您可以做的第一件事:将命令行作为列表而不是作为引用的字符串提交。有关许多示例,请参阅subprocess docs。
-
我相信你的问题是因为重复的\-es,但我可能错了。
-
Windows 文件夹/文件路径不能包含
:字符,除非在分隔驱动器号时,例如:C:\foo\bar.txt可以。C:\foo\bar:::baz.txt不是。
标签: python sql sql-server database-backups