パラメータ:の問題は、私はモデルのカスタム生のクエリを作成しようとしていたと私はこのエラーを取得
DatabaseError: error de sintaxis en o cerca de «E'positions_statusrecord'» LINE 1: SELECT id FROM E'positions_statusrecord' WHERE "type"=E'Leav...
は、ここで(それはマネージャーの方法私が使用しようとしている生のクエリのさ):
def get_status_ids(self, model):
"""
This query returns the latest statuses ids for each entry
of "model" in StatusRecord.
"""
db_table = self.model._meta.db_table
model_type = model.get_status_type()
raw_query = (
"SELECT id "
"FROM %s "
"WHERE \"type\"=%s AND "
"(identifier,date_time) IN "
"("
"SELECT identifier, Max(date_time) "
"FROM %s "
"WHERE \"type\"=%s "
"GROUP BY identifier"
")"
)
params = (db_table, model_type, db_table, model_type,)
return self.raw(raw_query, params)
私は単純なクエリ(ちょうどSELECT ... FROM ..
)を試み、同じ問題を抱えていました。未処理のクエリでは、パラメータを使用してFROM
部分を完成させることはできませんでした。
私は正しいですか?私は間違いを犯したのですが、私はそれを見つけられませんか?
私はpostgreSQL 8.4.10、django 1.3、およびPython 2.6を使用しています。
未処理のクエリパラメータに関する情報を検索して、いくつかの禁止されている書式設定オプションがあるかどうかを確認しましたが、何か助けになるものは見つかりませんでした。
誰もがこのエラーの原因を知っていますか?
ありがとうございます。私は、常に "params"引数で引数を生のクエリに渡すことが推奨されると考えました。私はセキュリティ問題の初心者ですので、私は常にそのように使用しようとしました。しかし、このケースでは信頼できる入力であることは事実です。 「EXISTS」の問題については、これまでに行ったことだと思いますが、別の方法ではパフォーマンスの問題がありました。私が正しければ、そのクエリはテーブル内のすべてのエントリに対してサブクエリを作成し、テーブルには(2000以上の)エントリがたくさんあります。私はこれをやったと思うが、私はもう一度試してみるだろう。どうもありがとうございました! – marianobianchi
@marianobianchi:2000エントリはかなり小さく、 'IN'と' EXISTS'の間に違いは見られません。 –