在Python中插入未转义的字符串

时间:2017-08-01 20:04:01

标签: python python-2.7 postgresql psycopg2

psycopg2游标接受带有表示text / char / varchar值的转义子字符串的字符串。例如,要使用插入表中的存储过程:

cur.execute('SELECT insert_profile("name", "favorite color example")')

当我尝试使用字符串插值来插入变量传递给execute函数的字符串时,会出现问题。

我试图在字符串文字上对变量和单引号使用双引号,但这只是执行常规操作。例如:

name = "Harry"
color = "Blue"
cur.execute('SELECT insert_profile({0}, {1})'.format(name, color)

我也尝试嵌套变量,但是它将文字嵌套字符串插入到数据库中:

name = "'Harry'"
color = "'Blue'"

什么是正确的方法?很抱歉,答案是在SO或互联网上的其他地方。我没有成功环顾四周。

1 个答案:

答案 0 :(得分:0)

来自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)})

查询字符串具有引用字典中键的占位符,驱动程序将使用适当的引号,转义等插入值,这可以为您节省很多麻烦。

更重要的是:你永远不应该通过诸如concat操作或format之类的字符串操作来构建查询。由于SQL注入,这留下了巨大的安全漏洞。让司机努力工作!