在MySQL中存储Windows路径而不转义反斜杠

1 投票
3 回答
1189 浏览
提问于 2025-04-17 03:05

我想在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

只需要用一个字典来在需要的地方加上斜杠,这样就能让查询变得有效:

http://codepad.org/7mjbwKBf

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 机器,无法再测试了。

撰写回答