【问题标题】:Dynamic String Replacement in Python using Format()在 Python 中使用 Format() 进行动态字符串替换
【发布时间】:2015-01-31 22:59:37
【问题描述】:

当参数可以变化时,有没有办法用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(),事先不知道参数?

【问题讨论】:

    标签: python string dictionary


    【解决方案1】:

    请注意,您使用的任何数据库包都已经包含此功能,这将更加健壮(例如,适当的引用/转义(非常糟糕)和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 查询。

    【讨论】:

    • 哇,Python 让生活变得如此轻松!关于使用数据库 API,我将学习/阅读。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多