在 Python 中插入未转义的字符串
Interpolate unescaped string in Python
psycopg2 游标采用一个字符串,其中包含表示 text/char/varchar 值的转义子字符串。例如,要利用插入 table 的存储过程:
cur.execute('SELECT insert_profile("name", "favorite color example")')
当我尝试使用字符串插值将变量插入传递给执行函数的字符串时,我的问题就出现了。
我试过在变量上使用双引号,在字符串文字上使用单引号,但这只是执行通常的操作。例如:
name = "Harry"
color = "Blue"
cur.execute('SELECT insert_profile({0}, {1})'.format(name, color)
我也试过嵌套变量,但它会将文字嵌套字符串插入到数据库中:
name = "'Harry'"
color = "'Blue'"
正确的做法是什么?抱歉,如果答案在 SO 或互联网的其他地方。我没有成功环顾四周。
来自 psycopg 网页:
cur.execute(
... """INSERT INTO some_table (an_int, a_date, another_date, a_string)
... VALUES (%(int)s, %(date)s, %(date)s, %(str)s);""",
... {'int': 10, 'str': "O'Reilly", 'date': datetime.date(2005, 11, 18)})
查询字符串包含引用字典中键的占位符,driver 将通过适当的引号、转义等方式插入值,这可以为您省去很多麻烦。
更重要的是:你永远不应该通过像 concat 操作或 format
这样的字符串操作来构建查询。由于 SQL 注入,这留下了一个巨大的安全漏洞。让 driver 努力工作吧!
psycopg2 游标采用一个字符串,其中包含表示 text/char/varchar 值的转义子字符串。例如,要利用插入 table 的存储过程:
cur.execute('SELECT insert_profile("name", "favorite color example")')
当我尝试使用字符串插值将变量插入传递给执行函数的字符串时,我的问题就出现了。
我试过在变量上使用双引号,在字符串文字上使用单引号,但这只是执行通常的操作。例如:
name = "Harry"
color = "Blue"
cur.execute('SELECT insert_profile({0}, {1})'.format(name, color)
我也试过嵌套变量,但它会将文字嵌套字符串插入到数据库中:
name = "'Harry'"
color = "'Blue'"
正确的做法是什么?抱歉,如果答案在 SO 或互联网的其他地方。我没有成功环顾四周。
来自 psycopg 网页:
cur.execute(
... """INSERT INTO some_table (an_int, a_date, another_date, a_string)
... VALUES (%(int)s, %(date)s, %(date)s, %(str)s);""",
... {'int': 10, 'str': "O'Reilly", 'date': datetime.date(2005, 11, 18)})
查询字符串包含引用字典中键的占位符,driver 将通过适当的引号、转义等方式插入值,这可以为您省去很多麻烦。
更重要的是:你永远不应该通过像 concat 操作或 format
这样的字符串操作来构建查询。由于 SQL 注入,这留下了一个巨大的安全漏洞。让 driver 努力工作吧!