SQL 查询中的字符串插值:危险 and/or 错误? (python)

string interpolation in SQL query: dangerous and/or wrong? (python)

我们都知道 Bobby Tables 的故事,而不只是对来自用户的字符串使用简单的字符串插值。

但我想知道是否可以从我自己的硬编码字符串中使用字符串插值。

例如,我看不出这有什么危险,但我想确定一下。如果出于某些非安全原因,这只是错误的方法,我也想知道。

table_dict = {'option1':'table_1','option2':'table_2'}

query_string = "SELECT * FROM {}".format(table_dict[string_from_front_end])

显然,这是一个比我实际打算做的要简单得多的示例——我的实际查询要长得多——但我的问题是关于字符串插值。

  1. 安全吗?
  2. 有更好的方法吗?

只要查询永远不会包含用户输入,就可以了。

尽管我建议尽可能使用 ORM,因为它们通常用于处理字符串插值。