You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MySQL中查询包含任意单双引号的文本内容

问题根源

你的参数化查询用法错误,是导致匹配永远失效的核心原因,具体问题有两个:

  • 使用Python的MySQL驱动做参数化查询时,不需要手动给字符串参数加单引号,驱动会自动处理所有特殊字符转义、引号包裹逻辑。你额外给url拼接了\'前后缀,相当于实际查询的是带单引号的URL,和数据库里存储的不带单引号的URL完全匹配不上,自然永远返回count=0。
  • 直接用超长HTML文本做匹配条件容易因为空白字符(多余空格、制表符、换行)、编码转换的微小差异导致匹配失败,可靠性极低。

修复方案

第一步:修正查询写法

直接传原始参数即可,不要手动加任何引号,修改后的代码如下:

self.Cursor = self.db.cursor(buffered=True)
FetchQuery = "SELECT COUNT(*) FROM scrappedjobs where URL = %s AND JobDescription = %s"
# 去掉url前后手动拼接的单引号,直接传入原始值即可
self.Cursor.execute(FetchQuery, (item['url'], item['text']))

if(self.Cursor.fetchone()[0]== 0):
    print("Inserting into db...\n")
    InsertQuery = "INSERT INTO scrappedjobs (URL, JobTitle, JobDescription, CompanyName) VALUES (%s, %s, %s, %s)"
    self.Cursor.execute(InsertQuery,(item['url'], item['title'], item['text'], item['companyName']))
    self.db.commit()

第二步(可选,优化匹配逻辑)

如果修改后仍有偶发匹配失败的问题,建议调整去重逻辑:

  • 绝大多数招聘页面的URL是唯一的,直接去掉JobDescription匹配条件,仅用URL做去重判断,性能更高也不会出现匹配误差。
  • 如果确实需要校验内容是否更新,可以给爬取到的JobDescription计算MD5哈希值,单独新增一个哈希字段存储,查询时仅匹配哈希值即可,既不会受引号、特殊字符影响,查询效率也比匹配超长字符串高很多。

手动写SQL的转义方法

如果需要在phpMyAdmin中手动测试查询,只需要把字符串里的单引号替换为两个连续单引号即可,不需要转义双引号,示例正确写法:

SELECT COUNT(*) FROM scrappedjobs WHERE JobDescription = '<div class="article__content">......group''s ongoing efforts......</div>'

内容的提问来源于stack exchange,提问作者user16460949

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 23:45:02