0

Python を使用して blogdata を sql ファイルとして保存しています。

str = "INSERT INTO TABLENAME (id,name,con) VALUES ('%d','%s','%s')" %(id,nam,con)

ここで、「コン」とは、一重引用符、二重引用符などのあらゆる種類のものを含むコンテンツを指します。したがって、ファイルは次のようになりました。

INSERT INTO TABLENAME (id,name,con) VALUES('1','first','Hi I'm XXX . "435"  'sdfsd' ')

上記の行の最後の部分に注意してください。異なる引用符が含まれているため、上記の形式を使用すると、SQL ファイルは実行されません。これに対する解決策は何ですか? 必要に応じてさらに情報を提供します。

ありがとう

4

2 に答える 2

1

psycopg2 にはmogrify、安全な SQL クエリを文字列として出力するメソッドがあります。

>>> print cur.mogrify("insert into table_name (id, name, con) values (%s, %s, %s)", ('1','first',"Hi I'm XXX"))

insert into table_name (id, name, con) values (E'1', E'first', E'Hi I''m XXX')

このメソッドについては、DB モジュールを確認してください。

于 2012-07-04T12:42:18.227 に答える
1

あなたがしたいのは、クエリをサニタイズして、SQL インジェクションを回避し、有効なクエリを作成することです。これを行うには、文字列などのリテラル値をエスケープする必要があります。これにはライブラリがあります。あなたの場合、それは最も安全でないオプションですがrepr、文字列に使用できます。これは仕事をします。より良いオプションがあります。これを使用しないでください。データベースドライバーが提供するものを使用してください。例えば:

MySQL を使用している場合は、安全に実行できる SQL ファイルを生成できるように、python-mysql( ) を使用して文字列をエスケープできます。MySQLdb

>>> print a
Hi I'm XXX . "435"  'sdfsd' 
>>> import MySQLdb
>>> encoded_a = MySQLdb.escape_string(a)
>>> print encoded_a
Hi I\'m XXX . \"435\"  \'sdfsd\' 

を使用する場合MySQLdb.escape_string、文字が安全であることを確認してから、使用していたフォーマット文字列を使用します。また、「危険」な人だけでなく、すべての値に対してこれを行うようにしてください。

MySQL を使用していない場合は、postgresql についてこちらを確認してください。

SQL 経由で直接使用したくない場合は、MySQL の MySQLdb などのライブラリを調べてください。

于 2012-07-04T12:46:55.500 に答える