【问题标题】:Python: inserting double or single quotes around a stringPython:在字符串周围插入双引号或单引号
【发布时间】:2011-01-27 04:44:06
【问题描述】:

我正在使用 python 访问 MySQL 数据库,并且由于变量周围没有引号,我在字段中得到了一个未知列。

代码如下:

cur = x.cnx.cursor()
cur.execute('insert into tempPDBcode (PDBcode) values (%s);' % (s)) 
rows = cur.fetchall()

如何在 s 的值周围手动插入双引号或单引号? 我尝试使用str() 并在s 周围手动连接引号,但它仍然不起作用。 sql 语句工作正常 iv 双重和三重检查我的 sql 查询。

【问题讨论】:

    标签: python sql quotes


    【解决方案1】:

    如果这纯粹是一个字符串处理问题,答案就是把它们放在字符串中:

    cur.execute('insert into tempPDBcode (PDBcode) values ("%s");' % (s)) 
    

    这就是 Python 支持这两种引号的经典用例。

    但是,正如其他答案和 cmets 所指出的那样,在这种情况下存在与 SQL 相关的特定问题。

    【讨论】:

    • 虽然SQL在字符串周围指定了单引号,所以这里的单引号和双引号应该互换
    • @Ian - 谢谢,不知道 SQL。显然我没有正确理解!我已经进行了相应的编辑。
    • 如果您关心 SO 徽章,我相信通过在 -3 处删除此答案,您最终会获得“同行压力”徽章。
    【解决方案2】:

    如果您使用数据库 API,Python 会自动为您执行此操作:

    cur = x.cnx.cursor()
    cur.execute('insert into tempPDBcode (PDBcode) values (%s)',s) 
    

    使用 DB API 意味着 python 将判断是否使用引号,也意味着您不必担心 SQL 注入攻击,以防您的 s 变量恰好包含,例如,

    value'); drop database; '
    

    【讨论】:

      【解决方案3】:

      您不应该使用 Python 的字符串函数来构建 SQL 语句。您冒着留下 SQL 注入漏洞的风险。你应该这样做:

      cur.execute('insert into tempPDBcode (PDBcode) values (%s);', s) 
      

      注意逗号。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-11-09
        • 1970-01-01
        • 2011-03-09
        • 2014-09-18
        • 1970-01-01
        • 1970-01-01
        • 2022-01-18
        相关资源
        最近更新 更多