【问题标题】:passing python parameters into a string which will be used as a python parameter将 python 参数传递到一个字符串中,该字符串将用作 python 参数
【发布时间】:2022-01-28 00:19:39
【问题描述】:

我正在尝试从 web 表单中的字符串传递 python,并将其他输入作为可选参数。我正在使用烧瓶,所有值都作为字符串到达​​ python 程序。 我想做这样的事情。我怀疑整个想法是不可能的:)

任何想法堆栈??

parameter_1 = "Foo"
parameter_2 = "Bar"
sql_string = 'Hello {parameter_1} this is  {parameter_2}; '
formatted_sql = f'''{sql_string}'''
print(sql_string)
print(formatted_sql)

【问题讨论】:

  • 虽然您的问题是关于字符串模板的(我在下面给出了答案),但 SQL 一词对我来说很重要。您永远不应该通过将用户提供的字符串填充到模板中来构建 SQL 查询,因为这很可能会导致 SQL 注入攻击。始终使用参数化查询(如何,取决于 DB 驱动程序)。

标签: python parameter-passing


【解决方案1】:

你可以使用.format():

parameter_1 = "Foo"
parameter_2 = "Bar"
sql_string = 'Hello {p1} this is {p2}'
formatted = sql_string.format(p1=parameter_1, p2=parameter_2)
print(sql_string)
print(formatted)

这也允许sql_string 重复使用,使用不同的参数。

【讨论】:

    【解决方案2】:

    Python 是相当.. 动态的。您可以使用locals() 获取局部变量的dict。然后使用str.format() 应用于模板(不会是f-string):

    parameter_1 = "Foo"
    parameter_2 = "Bar"
    sql_string = 'Hello {parameter_1} this is {parameter_2}; '
    formatted_sql = sql_string.format(**locals())
    print(sql_string)
    print(formatted_sql)
    

    这将输出:

    Hello {parameter_1} this is {parameter_2};
    Hello Foo this is Bar;
    

    现在.. 将替换变量直接定义为 dict 会更好,例如:

    tvars = { 'parameter_1': 'Foo', 'parameter_2': 'Bar' }
    formatted_sql = sql_string.format(**tvars)
    

    【讨论】:

    • 这正是我所需要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-04
    • 1970-01-01
    • 2017-08-10
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多