2014-01-29 14 views
1

尝试真的很难使用-v开关将变量传递给SQL脚本(Python),但似乎无法获得正确的语法。我收到以下错误:Python/SupProcess/SqlCmd /使用-v开关来传递变量

(注意它是如何失去了C:从参数和附加关闭反斜线)

[标准输出] SQLCMD:“:\用户\公用\的Myproj \测试\ WorkingFolder \数据库\“':无效参数。输入' - ?'对于

在服务器端的帮助,这是我的语法:

FILENAME = N'$(LOCATION)\MyDatabase.mdf' 

下面是我的代码

 _varText = 'LOCATION="C:\\Users\\Public\\MyProj\\Tests\WorkingFolder\\Database"'  
     command_process = SubP.Popen(['sqlcmd','-b', '-E', '-S', _server, '-v', _varText , '-d', _database, '-i', filepath], 
           stdin = SubP.PIPE, stdout = SubP.PIPE, stderr = SubP.STDOUT, shell = True) 
+0

圣克拉波拉 - 我终于必须做一个工作(对于任何人后来阅读)。在python结尾,我用一个标记替换了冒号(我选择了“{col}”,然后在T-SQL结尾做了反向替换。它并不漂亮,但它让我有了这个问题。发送一个冒号 –

回答

0

您可以尝试

_varText = 'LOCATION=\"C:\\Users\\Public\\MyProj\\Tests\WorkingFolder\\Database\"' 

它是基于本部分推荐:http://docs.python.org/2/library/subprocess.html#converting-an-argument-sequence-to-a-string-on-windows

+0

非常感谢你 - 但是这并没有解决它......我仍然得到同样的错误我昨天学到的一件事就是问题出现在“:”。我使用冒号传递一个变量,它将丢弃前导文本 –

+0

...另外,我不认为您想要在您的示例中使用双引号,因为它在单引号内。 –