【问题标题】:Django & Postgres explicit SQL parameters escapeDjango 和 Postgres 显式 SQL 参数转义
【发布时间】:2011-02-21 10:11:00
【问题描述】:

我需要对我的数据库构造一个长 SQL 请求,但我不确定如何正确转义参数

如何像 cursor.execute() 那样在 SQL 中显式转义参数?

你能否也给我一个例子,这个转义到底是做什么的,所以我可以测试它?

转义标准SQL请求或数据库函数调用有什么区别吗?

【问题讨论】:

  • 好吧,我来咬一口。 为什么你不能让cursor.execute()处理它吗?
  • 因为我的参数列表不固定,需要做一个循环,所以我可以创建一个合适的SQL请求
  • select * from function_name(params_count, ARRAY[(param, param, param), (param, param, param), (param, param, param) ...

标签: sql django security postgresql


【解决方案1】:

如果您需要动态构建参数列表:

sql = "SELECT FROM foo WHERE bar='baz'"
param_list = []
for entry in loop_array:
    sql = sql + "AND " + entry.key + " = %s"
    param_list.append(entry.value)

cursor.execute(sql, param_list)

【讨论】:

  • 这看起来很完美,但如果我的 SQL 是函数调用,它会起作用吗?以及如何测试转义是否正常工作?
  • 当然,如果您执行 SELECT my_function_call(%s, %s),它的效果会更好。 Django Documentation 确认引用是根据您的数据库引擎的需要进行的。也可以使用Django Debug Toolbar等工具查看生成的SQL代码。
  • 最后一个问题 :) %s 是否意味着 entry.value 是字符串?如果是整数呢? :)
  • 不,%s 只是参数的占位符。你也可以在参数列表中传递整数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-22
  • 1970-01-01
  • 2011-01-07
  • 1970-01-01
  • 2015-01-12
  • 2022-01-24
相关资源
最近更新 更多