MySQLdb导入字符串时反斜杠丢失问题求助
解决MySQLdb导入字符串时反斜杠丢失的问题
这个反斜杠被“吃”的问题我之前也踩过坑,本质是Python字符串的转义机制和MySQLdb的默认转义行为叠加导致的——Python会先解析一次字符串里的反斜杠,MySQLdb执行SQL时又会再转义一次,双重作用下就出现了你说的情况:"\\"变成单个"\",单个"\"直接被当成无效转义丢失。
下面给你几个靠谱的解决办法:
1. 使用参数化查询(强烈推荐,还能防SQL注入)
这是最省心也最安全的方式,完全不用手动处理转义,MySQLdb会帮你正确处理所有特殊字符。把你的插入逻辑改成参数化形式:
cnxn = MySQLdb.connect(host=entry_server_value, user=entry_user_value, passwd=entry_password_value, db=entry_dbName_value) cursor = cnxn.cursor() # 假设你要插入的表是your_table,columns是字段列表,values是对应的值列表 placeholders = ", ".join(["%s"] * len(columns)) sql = f"INSERT INTO your_table ({', '.join(columns)}) VALUES ({placeholders})" # 直接把values列表传给execute,MySQLdb会自动处理转义 cursor.execute(sql, values) cnxn.commit() # 别忘了关闭游标和连接 cursor.close() cnxn.close()
2. 手动用MySQLdb的转义方法处理字符串
如果因为某些限制不能用参数化查询,可以用MySQLdb自带的转义工具来处理字符串:
from MySQLdb.converters import escape_string # 对每个字符串值做转义处理 escaped_values = [] for val in values: if isinstance(val, str): escaped_values.append(escape_string(val)) else: escaped_values.append(val) # 拼接SQL语句(注意:这种方式有SQL注入风险,非必要别用) values_str = ", ".join([f"'{v}'" for v in escaped_values]) sql = f"INSERT INTO your_table ({', '.join(columns)}) VALUES ({values_str})" cursor.execute(sql)
3. 检查数据库连接的字符集设置
有时候字符集不匹配也会导致特殊字符处理异常,确保连接时指定正确的字符集(比如utf8mb4):
cnxn = MySQLdb.connect( host=entry_server_value, user=entry_user_value, passwd=entry_password_value, db=entry_dbName_value, charset='utf8mb4', use_unicode=True )
另外提个小技巧:在Python里定义包含反斜杠的字符串时,尽量用原始字符串前缀r,比如r"\\"表示两个原始反斜杠,r"\"表示单个原始反斜杠,这样Python不会提前解析转义字符,能减少很多麻烦。
内容的提问来源于stack exchange,提问作者Ilazar1x
相关产品推荐
相关产品推荐

