私はPythonでMySQLdbを使用しています。PythonでSQL文をチェックして実行する方法
sql = "insert into table VALUES (%s, %s, %s)"
args = var1, var2, var3
cursor.execute(sql, args)
または::
cursor.execute("insert into table VALUES (%s, %s, %s)", var1, var2, var3)
あるいは、この(これは間違っているかもしれない):私は、適切にSQL文を作成し、私のようなものをコーディングする必要があり、SQLインジェクション攻撃を避けるために、と言われた
header = ('id', 'first_name', 'last_name')
values = ('12', 'bob' , 'smith' )
cursor.execute("insert into table (%s) values (%s)", (header + values))
私はPHPでプログラミングしたとき、私は通常SQL文全体を長い文字列として保存してから文字列を実行します。 (PostgreSQLの付き)のようなものは:
$id = db_prep_string(pg_escape_string($id ));
$first_name = db_prep_string(pg_escape_string($first_name));
$last_name = db_prep_string(pg_escape_string($last_name ));
$query = "insert into table (id, first_name, last_name) values ($id, $first_name, $last_name)"
$result = pg_query($con, $query);
$retval = pg_fetch_array($result);
db_prep_string
は、私は単純に全体のSQL文を表示する$query
をエコー可能性があり、デバッグに続いて
function db_prep_string($value) {
if(
!isset($value) ||
(is_null($value)) ||
preg_match('/^\s+$/', $value) ||
($value == '')
) {
$value = 'null';
}
else {
$value = "'$value'";
}
return $value;
}
です。私がPythonでできることと似たものはありますか?つまり、安全な SQL文を文字列として格納し、それを出力してデバッグしてから実行することはできますか?
私のような何かをしたいと思います:いない場合は
id = prevent_sql_injection_string(id )
first_name = prevent_sql_injection_string(first_name)
last_name = prevent_sql_injection_string(last_name )
sql = "insert into table (id, first_name, last_name) values "
sql += id + ", "
sql += first_name + ", "
sql += last_name
print sql #for debugging
cursor.execute(sql)
を、そしてどのように私はPythonで、その全体がビュー SQL文のですか?
ボーナス質問:Pythonを使用してSQL文にnull値を入力するにはどうすればよいですか?
これは、「パラメータ化された」クエリまたはSQLを使用して呼び出されます。 – DOK
ヌル値を入力する場合は、「なし」を使用します。 – MRAB
pgsqlクエリに引数を埋め込んで、1つの大きな文字列を取得しましたか?ヤク! PHPでさえ、あなたは 'pg_query_params'を持っています。ここでは、クエリを値から分離することができます。 – ThiefMaster