我正在尝试使用python Template模块替换以下内容。
start_date BETWEEN DATEADD(days,-14,'${DATE_YYYY-MM-DD}') AND '${DATE_YYYY-MM-DD}'
我正在使用ConfigParser读取值并将其存储到我能够成功完成的字典(config_params)中。然后我做了一个安全的替代品来代替上面的模板,但似乎没有做任何事情。它取代了文件中的许多其他参数,但似乎没有替换$ {DATE_YYYY-MM-DD}
我正在使用的代码如下:
with open(templateFile, 'r+') as f:
temp = Template(f.read())
resultFile = temp.safe_substitute(config_params)
有关为何发生这种情况的任何帮助?这是不喜欢的()吗?
TemplateFile:
SELECT
x
,y
,z
,a
,b
INTO ${od}.${tab}
FROM
mphd.${pd} as h
WHERE
a BETWEEN DATEADD(month,-12,'${DATE_YYYY-MM-DD}') AND '${DATE_YYYY-MM- DD}'
;
配置文件:
[GeneralParams]
od = sandbox
tab = abcd
pd = hierarchy_expanded
DATE_YYYY-MM-DD = 2016-08-05
config_params:
{'od': 'sandbox', 'DATE_YYYY-MM-DD': '2016-08-05', 'pd': 'hierarchy_expanded', 'tab': 'abcd'}
结果文件:
SELECT
x
,y
,z
,a
,b
INTO sandbox.abcd
FROM
mphd.hierarchy_expanded as h
WHERE
a BETWEEN DATEADD(month,-12,'${DATE_YYYY-MM-DD}') AND '${DATE_YYYY-MM- DD}'
;
答案 0 :(得分:1)
根据the doc,标识符应遵循的默认模式为:[_a-z][_a-z0-9]*
。使用substitute
代替safe_substitute
会对此发出警告。
但是,您可以通过创建新的模板类来解决这个问题:
class MyTemplate(Template):
idpattern = '[_a-z][_a-z0-9-]*' # Note the extra -
然后我们在您的代码中使用MyTemplate
(或任何您想要命名的内容)而不是Template
)。