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或互联网上的其他地方。我没有成功环顾四周。
答案 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注入,这留下了巨大的安全漏洞。让司机努力工作!