2

次のように、単純なSQLクエリを実行するときに、常にPythonパラメーター置換を使用することに慣れています。

# Never do this -- insecure!
symbol = 'RHAT'
c.execute("SELECT * FROM stocks WHERE symbol = '%s'" % symbol)

# Do this instead
t = ('RHAT',)
c.execute('SELECT * FROM stocks WHERE symbol=?', t)

ドキュメントでは、psycopg2彼らは次のようにも書いています。

Python 文字列連結 (+) または文字列パラメーター補間 (%) を使用して、変数を SQL クエリ文字列に渡すことは絶対にしないでください。銃を突きつけられても。

から SQLite データベースにデータを保存する必要がありますRdbSendQuery私はこれを、接続ハンドラとクエリ自体の 2 つの引数のみを受け入れる関数で実行しようとしました。しかし、どうすれば置換用のパラメーターを提供できますか?!

グーグルで調べてみると、(驚くべきことに!) R コミュニティでは、人々は常に を使用して SQL クエリを作成しpaste、それを にフィードすることを提案していることがわかりましたdbSendQuery。しかし、安全性とエレガンスはどうでしょうか? 誰も気にしていないようです... 私は個人的にこれを理解していません。

4

1 に答える 1

2

RSQLite を使用するdbGetPreparedQueryと、パラメーター化されたクエリ (つまり、値を準備済みステートメントにバインドする) に使用できます。ドキュメントを参照してください。ただし、バインドされた値をデータフレーム オブジェクトとして渡す必要があります。

sql <- "SELECT * FROM stocks WHERE symbol=?"

t <- 'RHAT'
df <- dbGetPreparedQuery(con, sql, bind.data=data.frame(symbol=t))
于 2016-11-22T16:43:34.320 に答える