python - 通过子进程备份 SQL 数据库时出现操作系统错误 123

标签 python sql sql-server database-backups

我目前正在尝试使用运行后台的 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 存在,因为我直接在命令行中测试了该命令,它运行良好。

Msg 3201, Level 16, State 1, Server MYSERVER\SQLSERVICE, Line 1
Cannot open backup device 'C:\Users\Malek\Documents\PYSQLBS\Backups\2019-09 -09-16:24:46.bak'. Operating system error 123(The filename, directory name, or volume label syntax is incorrect.).
Msg 3013, Level 16, State 1, Server MYSERVER\SQLSERVICE, Line 1
BACKUP DATABASE is terminating abnormally.

最佳答案

问题是备份文件名称中的 : 字符:2019-09 -09-16:24:46.bak

Windows 文件夹和文件路径不能包含 : 字符,除非在分隔驱动器号时,例如:C:\foo\bar.txt 可以。 C:\foo\bar:::baz.txt 不是。

关于python - 通过子进程备份 SQL 数据库时出现操作系统错误 123,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57860934/

相关文章:

python - 如何将 2 个数组列表添加到具有两个单独列名的单个 pandas 数据框中

java - 为什么像 Java 这样的语言使用分层包名,而 Python 不使用?

sql-server - Where 子句中的奇怪语法

php - 日期数据类型工作其他数据类型不工作 Sql

python - "if var"在python中是什么意思?

Python MySQLdb 连接错误

mysql - 将级联与复合主键结合使用

mysql - 如何连接外键中的信息?

mysql - 三张表的两次求和和内连接的SQL语句

sql-server - Reporting Services - 计算表中的行总数/百分比