Python双斜杠问题
我正在使用Python脚本向另一个系统的SQL服务器发送成千上万条插入查询。
下面是我插入的一个例子:
"INSERT INTO ImportData (ISBNORISSNORURL, FILENAME, PDFLOCATIONS, PROCESSED) VALUES('0442019521', 'pinto_1995_245_hires.pdf', 'I:\\Collect and Process Data\\Licensing Schemes Processing\\03 Data Preparation Original\\USQ\\September-October 2010\\pinto_1995_245_hires.pdf','0');"
文件路径字符串被赋值给一个全局变量:
PDFLOCATIONS = "I:\Collect and Process Data\Licensing Schemes Processing\03 Data Preparation Original\USQ\September-October 2010"
然后这个路径被添加到一个字典中,字典里包含了名称/值对,这些名称和值对应插入查询中的字段和数据。这些数据会被转换成字符串:
final_header_list = str(fields_value_list.keys()).replace("[","").replace("]","").replace("'","")
final_values_list = str(fields_value_list.values()).replace("[","").replace("]","").replace("'","")
接着这些字符串会被添加到最终的插入字符串中:
insert_query = 'INSERT INTO {0} ({1}) VALUES({2});'.format(TABLE,final_header_list,final_value_list)
然后这个插入字符串会以每次10000条的方式发送到SQL服务器。
在这个过程中,双反斜杠会直接传递到数据库,而不是神奇地变成单反斜杠。我显然不能用正斜杠作为替代。那么,有没有其他方法可以让我在这边得到想要的单反斜杠呢?还是说SQL服务器的管理员需要在他们那边做出改变?
非常感谢!
2 个回答
1
这个字符串之所以不会把双反斜杠变成单反斜杠,唯一的原因就是它是一个原始字符串——你需要检查一下它是怎么构建的。
编辑
好吧,现在你已经贴出了实际的代码——其实并没有双反斜杠。问题出现在 str(dict.keys()) 这一步,它在里面加了各种反斜杠。你需要用另一种方法来构建你的值字符串。我还想提一下,你应该把参数单独传递给 SQL 包装器,而不是作为一个字符串传递(这样做有可能会遭受 SQL 注入攻击)。
下面是构建字符串的方法,不会有多余的反斜杠:
final_values_list = ', '.join(fields_value_list.values)
1
试着把
PDFLOCATIONS = "I:\Collect and Process Data\Licensing Schemes Processing\03 Data Preparation Original\USQ\September-October 2010"
改成
PDFLOCATIONS = r"I:\Collect and Process Data\Licensing Schemes Processing\03 Data Preparation Original\USQ\September-October 2010"
(注意这里有个原始字符串的标记 - r
- )
编辑:再试一次
用一种笨办法:
final_values_list = ', '.join(fields_value_list.values).replace(r"\\", "\\")
这样可以强制字符串里没有双反斜杠。当然,我会先尝试把
insert_query = 'INSERT INTO {0} ({1}) VALUES({2});'.format(TABLE,final_header_list,final_value_list)
替换成
insert_query = 'INSERT INTO %s (%s) VALUES(%s);' % (TABLE,final_header_list,final_value_list)
以确保不需要用这种笨办法。