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

dgiusagp  于 2023-05-16  发布在  Mysql
关注(0)|答案(3)|浏览(218)

我想在MySQL中存储Windows路径而不转义反斜杠。如何在Python中做到这一点?我正在使用MySQLdb将记录插入数据库。当我使用MySQLdb.escape_string()时,我注意到反斜杠被删除了。

ha5z0ras

ha5z0ras1#

查看os.path.normpath(thePath)
我不记得是不是那个,但是有一个标准的os.path格式化函数,它给出了双反斜杠,可以“原样”存储在数据库中,并在以后“原样”重用。我没有更多的windows机器,不能测试它了。

osh3o9ms

osh3o9ms2#

只需使用字典在需要的地方添加斜杠,使查询有效:
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));
6mw9ycah

6mw9ycah3#

11年零7个月后,我可以说一种方法是首先用一个特殊字符替换所有的-比如一个制表符,(file_path.replace('\\','\t')),然后让MySQL将其转换回char(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()

相关问题