代码之家  ›  专栏  ›  技术社区  ›  lasalla

在Python中插入未替换的字符串

  •  0
  • lasalla  · 技术社区  · 9 年前

    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'"
    

    1 回复  |  直到 9 年前
        1
  •  0
  •   Chris Johnson user3351229    9 年前

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

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

    format 。由于SQL注入,这留下了一个巨大的安全漏洞。让司机做艰苦的工作!