.dat 파일에서 MS SQL 데이터베이스를 복원하려고합니다. 나는 이것을 반복해야하기 때문에, 그러나서브 프로세스 파이썬을 사용하여 SQLCMD 실행
sqlcmd -S POLIVEIRA-PC\MSSQLSERVER2008 -Q "RESTORE DATABASE [Odemira_2012-07-01_021501] FROM DISK=N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER2008\MSSQL\Backup\ODEMIRA2013\Odemira_2012-07-01_021501' WITH FILE=1, MOVE N'Odemira_Data' TO N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER2008\MSSQL\DATA\Odemira_2012-07-01_021501.MDF', MOVE N'Odemira_Log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER2008\MSSQL\DATA\Odemira_2012-07-01_021501_1.LDF', NOUNLOAD, STATS=10"
:
나는 성공적으로 Windows PowerShell을에서 다음 명령/문을 호출하거나 파일 자체를 .BAT 파일을 저장하고 실행하여 그것을했다 여러 데이터베이스로 여러 번 명령을 내리면 파이썬을 사용하여 루프에서 수행하고 싶습니다. 위의 명령을 복제하기 위해 서브 프로세스 모듈을 사용하려고했습니다. 불행하게도. 다음과 같이
내 파이썬 코드는 다음과 같습니다
import subprocess
host = 'POLIVEIRA-PC\\MSSQLSERVER2008'
mssql_dir = 'C:\\Program Files\\Microsoft SQL Server\\MSSQL10_50.MSSQLSERVER2008\\MSSQL\\DATA\\'
db_dir = 'C:\\Program Files\\Microsoft SQL Server\\MSSQL10_50.MSSQLSERVER2008\\MSSQL\\Backup\\ODEMIRA2013\\'
db = 'Odemira_2012-07-01_021501'
statement = '"RESTORE DATABASE [' + db + '] FROM DISK=N\'' + db_dir + \
db + '\' WITH FILE=1, MOVE N\'Odemira_Data\' TO N\'' + mssql_dir + \
db + '.MDF\', MOVE N\'Odemira_Log\' TO N\'' + mssql_dir + \
db + '_1.LDF\', NOUNLOAD, STATS=10"'
subprocess.call(["sqlcmd", "-S", host, "-Q", statement])
내가 Windows PowerShell을에 파이썬 스크립트를 실행하면, 나는 다음과 같은 오류 얻을 :
PS C:\Users\POliveira\Dropbox\Academia\IST\Dissertacao_de_Mestrado\SQL> python .\lib\temp.py
Sqlcmd: 'RESTORE DATABASE [Odemira_2012-07-01_021501] FROM DISK=N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER2008\MSSQL\Backup\ODEMIRA2013\Odemira_2012-07-01_021501' WITH FILE=1, MOVE N'Odemira_Data' TO N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER2008\MSSQL\DATA\Odemira_2012-07-01_021501.MDF', MOVE N'Odemira_Log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER2008\MSSQL\DATA\Odemira_2012-07-01_021501_1.LDF', NOUNLOAD, STATS=10\""': Unexpected argument. Enter '-?' for help.
내가 놓친 거지 모르겠어요를 . 나는 backslahes와 함께 큰 따옴표 ("RESTORE ... 10")를 벗어나려고했으나 작동하지 않았다.
EDIT : subprocess.call에 플래그 셸 = True를 추가하려고했지만 동일한 오류로 종료되었습니다.