2012-06-25 2 views
1

파이썬 프로그램 내에서 파일 주소를 처리하고 MySQL에 전달하려고합니다.파이썬 : 이중 백 슬래시 서식 지정

나는 원시 문자열을 주소로 사용하여 MySQL이 손상되지 않도록해야한다는 것을 알게되었습니다. 이 작동 :

myFilePath = r"'D:\\folder\\file.csv'" 
sqlStatement = r"LOAD data local INFILE %s INTO TABLE test ...);" % (myFilePath) 

그러나, 나는 GUI를 생성하고 경로 이름이 변하기 쉬워되고 싶어 해요. 그래서 정상적인 파일 경로를 올바른 형식으로 변환하려고하는데, 끝내지 못합니다.

어떻게 위의 myFilePath 같은 동일한 형식으로

filePath = "D:\folder\file.csv" 

을 변환 할 수 있습니다 ?

내가 지금까지 함께 왔어요 가장

myFilePath = r'r"' + "'" + filePath + "'" 

입니다하지만 난 여전히 기존의 백 슬래시를 두 번해야하고, 나는 그것을 할 수있는 방법을 찾을 수 없습니다. 나는 다음과 같이 iterating을 시도했다.

myFilePath = "" 
for i in range(len(filePath)): 
    if i == "\\": 
     myFilePath += "\\\\" 
    else: 
     myFilePath += filePath[i] 

그러나 백 슬래시의 이스케이프 속성 때문일 수있다. 그냥 원시 문자열을 사용하면 다시 원하는 백 슬래시가 생성되고, 나는 내 깊이에서 벗어납니다.

아무도 도와 줄 수 있습니까? 사전에

감사합니다, Lastalda

답변

5

당신은 처음에 SQL 문을 생성하는 문자열 서식을 사용하지 않아야합니다. 당신은 DB 인터페이스를 올바른 방법으로 사용하면 문제가 사라집니다 : SQL 문에 대한 서식 문자열을 사용

file_path = r"d:\folder\file.csv" 
cursor.execute("LOAD data local INFILE %s INTO TABLE test ...);", file_path) 

그냥 SQL 인젝션 공격에 자신을 열어 가고 있습니다.

+0

이것은 [매개 변수화]로 알려져 있습니다. (http://en.wikipedia.org/wiki/SQL_injection#Parameterized_statements) – MattH

+0

문제는 원래 filePath를 변수로 입력하려고하는데 r을 할 수 없다는 것입니다. (filePath) 등.하지만 난 그냥 솔루션을 발견 : repr (filePath) 완벽하게 일을 않습니다! 그래도 도움을 주셔서 감사합니다. :) – Lastalda

+0

@Lastalda : 나는 당신이 이것의 어떤 측면에 대해 혼란스러워한다고 생각합니다. r (filePath)은 필요 없습니다. 매개 변수화를 사용하면이를 수정해야합니다. –