0

プロジェクトのMYSQLデータベースにデータを挿入して、Pythonプログラミングを行っています。私はコーディングを行ってきましたが、奇妙なアーティファクトに気付きました。文字列データを挿入するたびに、挿入する文字列の両側に一重引用符 (') がデータベースに含まれます。

コードは次のようになります。「データ」は検索している大きな文字列です。

chars = r" -~"
shortest_run = 10    
regexp = '[%s]{%d,}' % (chars, shortest_run)

pattern = re.compile(regexp)

for current in pattern.finditer(data):
    temp_array = (current.start(), current.group(0))
    c_cursor.execute(base_insert,(temp_array[0], temp_array[1]))

挿入すると、データベースには次のような値が含まれます。

'Thisisthestring'

それがちょうどあるべきとき:

Thisisthestring

一重引用符はそこにあるべきではありませんが、あります。それらは実際には変数内に存在しないため、Python ステートメント (string[1:-1] など) でそれらを削除することはできません。

何かご意見は?

追加: 「base_insert」は、値をテーブルに入れる単純な SQL INSERT ステートメントです。次のように見えます。

Insert Into Strings_Output_tbl (Offset, Strings_out)
Values ("%s","%s")
4

2 に答える 2

0

.execute に文字列パラメーターを指定してみましたか?

c_cursor.execute(base_insert,(temp_array[0], temp_array[1]), s)

さらに、データベース クエリのガイドラインを確認する必要があります。Python の組み込み文字列関数は、コードがインジェクションに対して開かれる可能性があるため、避けるようにしてください。

于 2013-05-03T19:32:48.910 に答える
0

わかった。私はそれを考え出した。

base_insert SQL で二重引用符を使用すると、問題が発生します。.execute は、プロセスの一部として一重引用符を追加します。したがって、そこに二重引用符があると、すべてが台無しになります。base_insert の改善:

Insert Into Strings_Output_tbl (Offset, Strings_out)
Values (%s,%s)

これで、.execute で呼び出すと、DB に一重引用符がありません。

レトロで、明らかです。

于 2013-05-03T19:59:52.797 に答える