在MySQL中存储Windows路径而不转义反斜杠
我想在MySQL中存储Windows的路径,但不想对反斜杠进行转义。请问我该如何在Python中做到这一点?我正在使用MySQLdb来向数据库插入记录。当我使用MySQLdb.escape_string()时,我发现反斜杠被去掉了。
3 个回答
0
经过11年零7个月的经验,我可以告诉你一种方法:首先把所有的反斜杠(\)替换成一个特殊字符,比如说制表符(tab),可以用这个代码:file_path.replace('\\','\t')
。然后,让MySQL把它转换回字符92,也就是反斜杠(REPLACE('{log_file_name}',CHAR(9),CHAR(92)
)。
举个例子,从:
sql="INSERT INTO df_log (file_path) VALUES ('{log_file_name}');".format(file_path=file_path))
cursor.execute(sql)
conn.commit()
变成:
sql="INSERT INTO df_log (file_path) VALUES (REPLACE('{log_file_name}',CHAR(9),CHAR(92));".format(file_path=file_path.replace('\\','\t')))
cursor.execute(sql)
conn.commit()
0
只需要用一个字典来在需要的地方加上斜杠,这样就能让查询变得有效:
def addslashes(s):
dict = {"\0":"\\\0", "\\":"\\\\"} #add more here
return ''.join(dict.get(x,x) for x in s)
query = "INSERT INTO MY_TABLE id,path values(23,'c:\windows\system\')";
print(addslashes(query));
0
你可以看看 os.path.normpath(thePath)
这个函数。
我记不太清楚是不是这个,但确实有一个标准的 os.path 格式化函数,它会返回带有双反斜杠的路径,这样可以直接存储在数据库里,之后再用的时候也可以直接使用。我现在没有 Windows 机器,无法再测试了。