使用Format()在Python中动态字符串替换

时间:2014-12-03 11:34:32

标签: python string dictionary

当参数可以变化时,有没有办法用string.format()动态格式化字符串?我想写一个函数,其中输入是一个SQL字符串和一个名称 - 值对的字典;两种输入都可以变化。

例如,SQL字符串可能是

"select * from students where school={schoolArg} and age={ageArg}"

字典为{schoolArg: "some school", ageArg: 10}

另一个SQL字符串可能是

"select * from teachers where class={classArg}"

字典为{classArg: "history"}

......等等。

我可以毫无问题地使用string.replace()。但是有可能使用string.format(),其中参数事先不知道吗?

1 个答案:

答案 0 :(得分:5)

请注意,您正在使用的任何数据包都已包含此的功能,这将更加强大(例如适当引用/转义(非常糟糕)和SQL注入(very bad))比使用基本字符串格式。

参见例如How to use variables in SQL statement in Python?

不要自己动手,使用数据库API


话虽如此,你几乎已经完成了它:

>>> "select * from students where school={schoolArg} and age={ageArg}".format(**{"schoolArg": "some school", "ageArg": 10})
'select * from students where school=some school and age=10'
>>> "select * from teachers where class={classArg}".format(**{"classArg": "history"})
'select * from teachers where class=history'

(如果语法不熟悉,请参阅What does ** (double star) and * (star) do for parameters?

请注意,为了强调上述观点,您尚未正确引用模板字符串,因此输出不是有效的SQL查询。