【问题标题】:Python strings problem storing single quotePython字符串存储单引号问题
【发布时间】:2021-04-11 11:05:51
【问题描述】:

我正在尝试从 python 执行 mysql 查询。我想要输出

query = "UPDATE 'college_general' SET 'fees' = '180000' WHERE ('college_id' = '2')"

下面是sn-p的代码

def update(table, column, value):
    return f"UPDATE '{table}' SET '{column}' = '{value}' WHERE ('college_id' = '{id}')"

query = update("college_general", "fees", fee)
cursor.execute(query)

相反,Python 将其存储为

query = 'UPDATE \'college_general\' SET \'fees\' = \'180000\' WHERE (\'college_id\' = \'2\')'

这导致脚本失败。我怎样才能达到预期的输出? 提前致谢!

【问题讨论】:

    标签: python mysql


    【解决方案1】:

    您可以用反引号替换标识符单引号。如需更详细的答案,请访问question

    MySQL 中有两种类型的引号:

    1. ' 用于包含字符串文字
    2. ` 用于封装标识符,例如表名和列名

    【讨论】:

      【解决方案2】:

      这里有多个问题:

      首先,我怀疑您的程序的字符串处理位实际上正在工作,但是您对字符串的外部表示感到困惑。例如,如果你这样做

      x = "O'Reilly"
      

      在某些情况下,Python 会将字符串显示为

      'O\'Reilly'
      

      其次,我认为您使用了错误的引号。 SQL 中的单引号用于字符串; MySQL 在必要时使用反引号作为名称,而其他 SQL 实现通常为此使用双引号。

      第三,这很重要!不要使用字符串操作来构建 SQL 查询。数据库库几乎可以肯定具有参数化查询的功能,您应该使用它。您的查询应如下所示:

      query = 'UPDATE college_general SET fees = ? WHERE college_ID = ?'
      cursor.execute(query, [180000, '2'])
      

      但细节取决于您使用的数据库库。例如,有些使用%s 而不是?。这使您免于引用字符串的各种麻烦。

      【讨论】:

        【解决方案3】:

        raw string 是解决您问题的最简单方法。

        我相信下面的代码会实现你想要的。

        def update(table, column, value):
            return fr"UPDATE '{table}' SET '{column}' = '{value}' WHERE ('college_id' = '{id}')"
        
        query = update("college_general", "fees", fee)
        cursor.execute(query)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-06-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-10
          相关资源
          最近更新 更多