1

Pythonプログラム内でファイルアドレスを処理し、それをMySQLに渡そうとしています。

MySQLにそのまま到達するために、アドレスに生の文字列を使用する必要があることがわかりました。これは機能します:

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

ただし、GUIを作成しているので、パス名を変更できるようにします。そのため、通常のファイルパスを正しい形式に変換しようとしていますが、それを実行できません。

どうすれば変換できますか

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

上記のmyFilePathとまったく同じ形式に変換しますか?

私がこれまでに思いついた最高のものは

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

しかし、それでも既存の円記号を2倍にする必要があり、それを行う方法が見つかりません。私は次のように繰り返してみました:

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

しかし、おそらくバックスラッシュのエスケープの性質のために、それは機能しません。生の文字列をもう一度使用するだけで、必要以上のバックスラッシュが作成され、深みがなくなります。

誰か助けてもらえますか?

4

1 に答える 1

5

そもそもSQLステートメントを作成するために文字列フォーマットを使用するべきではありません。dbインターフェースを正しい方法で使用すると、問題は解決します。

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

SQLステートメントに文字列フォーマットを使用することは、SQLインジェクション攻撃にさらされるだけです。

于 2012-06-25T15:19:25.590 に答える