当参数可以变化时,有没有办法用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()
,其中参数事先不知道吗?
答案 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查询。