Python占位符替换时为何出现首尾反斜杠?
问题排查与解决
首先要明确:你看到的反斜杠大概率只是Python对字符串的表示形式,而非实际存储的内容。
比如在Python交互式环境中直接查看变量时,会用repr()函数输出字符串,此时为了区分字符串的边界(你的SQL用双引号包裹,内部的单引号会被转义显示),但实际字符串里并没有反斜杠。你可以通过print()函数输出SQL字符串,就能看到真实的内容——此时trade_date = '2022-11-29'应该是正常显示的。
如果确实存在实际内容带反斜杠的情况,检查以下两点:
- 确认
passive_availablity_date.strftime('%Y-%m-%d')的输出:直接打印这个值,确保它是纯2022-11-29字符串,没有额外转义。 - 检查字符串拼接逻辑:你的代码用三重双引号包裹SQL,内部单引号是普通字符,
format()替换时只会直接插入日期字符串,不会自动添加转义。如果仍有问题,尝试改用f-string写法验证:sql = f"""SELECT security_id AS securityID, trade_date AS date, available, currency_code AS sourceCurrency FROM cppib_market_passive_swap_availability WHERE trade_date = '{passive_availablity_date.strftime('%Y-%m-%d')}' """
最后提醒:直接拼接SQL字符串存在SQL注入风险,建议使用数据库驱动的参数化查询,比如:
cursor.execute("""SELECT security_id AS securityID, trade_date AS date, available, currency_code AS sourceCurrency FROM cppib_market_passive_swap_availability WHERE trade_date = %s""", (passive_availablity_date.strftime('%Y-%m-%d'),))
参数化查询不仅能彻底避免引号转义问题,还能提升代码安全性。
内容的提问来源于stack exchange,提问作者Avi G
相关产品推荐
相关产品推荐

