将日期值作为变量传递给python脚本并在python脚本文件中使用它

时间:2017-10-13 17:16:47

标签: python batch-file ssis

我有一个SSIS包,通过执行流程任务,我应该执行一个python脚本文件,该文件下载一个由我的ssis包传递的连接日期值的文件。 / p>

现在我的实际问题是当我从python批处理文件执行windows脚本时如何传递日期值,这样我应该在{{1}内部有一些代码用于获取该值并以更简单的方式执行操作的脚本,我的要求如下所示:

现有Windows批处理文件内容:

python

预期的Windows批处理文件内容:

python C:\MyPythonScript.py

python C:\MyPythonScript.py '@DateVariable' 值是动态的,运行时值从我的@DateVariable包传递到批处理文件。

我的Python代码应该是这样的:

ssis

由于我来自datevalue=getDateValue from @DateVariable #do some processing with the assigned datevalue 背景,我只是期待一个像存储过程这样的简单机制,其中提供的参数在存储过程中使用...

请帮助我使用SQL中的确切代码,而不是建议我引用链接。

1 个答案:

答案 0 :(得分:0)

我已将我的批处理文件定义为

echo As of %1 > C:\ssisdata\so_46734971.txt

需要注意的重要一点是,Windows批处理文件将使用基于1的位置序数系统作为参数。如果在批处理脚本中有python调用,则语法将相同。 python MyFile.py %1

然后我将我的执行流程任务配置为使用两个变量 - 第一个定义批处理文件的位置,因为我懒惰且已经写了。第二个变量是一个以yyyy-mm-dd方式计算日期的字符串。如果需要不同的值,请修改表达式,直到它与python脚本期望的格式匹配。

BIML

商业智能标记语言Biml是获得可重现的SSIS包的最简单方法。在这里,我定义了一个具有上述变量和执行过程任务的SSIS包。只需安装免费工具BimlExpress,然后将新的.biml文件添加到项目中。右键单击并选择生成SSIS包,然后输出完全正常的再现。

<Biml xmlns="http://schemas.varigence.com/biml.xsd">
    <Packages>
        <Package Name="SO_46734971">
            <Variables>
                <Variable Name="ExecutionDateString" DataType="String" EvaluateAsExpression="true">"\"" + (DT_WSTR, 4) YEAR(@[System::StartTime]) + "-" + RIGHT("0" + (DT_WSTR, 2) MONTH(@[System::StartTime]),2) + "-" + RIGHT("0" + (DT_WSTR, 2) DAY(@[System::StartTime]),2) + "\""</Variable>
                <Variable Name="Command" DataType="String">C:\ssisdata\so_46734971.bat</Variable>
            </Variables>
            <Tasks>
                <ExecuteProcess 
                    Name="EP Run batch file" 
                    Executable="C:\ssisdata\so_46734971.bat"
                    Arguments="Overridden">
                    <Expressions>
                        <Expression ExternalProperty="Executable">@[User::Command]</Expression>
                        <Expression ExternalProperty="Arguments">@[User::ExecutionDateString]</Expression>
                    </Expressions>
                </ExecuteProcess>
            </Tasks>
        </Package>
    </Packages>
</Biml>