2016-03-30 25 views
4

私は動的に構築された生のクエリを実行しようとしています。 パラメータが有効な位置に挿入されるように、私は名前付きパラメータを使用しています。Django:生のSQLクエリで名前付きパラメータを使用

これはSqliteでは問題なく動作するようです。 (すべての私のテストが成功する) しかし、私はMariaDbに対して同じコードを実行しているとき、それは...

簡単な例クエリ失敗:

SELECT u.* 
    FROM users_gigyauser AS u 
    WHERE u.email like :u_email 
    GROUP BY u.id 
    ORDER BY u.last_login DESC 
    LIMIT 60 OFFSET 0 

パラメータは次のとおりです。

{'u_email': '%test%'} 

エラーをパラメータが置き換えられないため、デフォルトの構文エラーが発生します。 私は指標として「%」を使用してみましたが、これは

%u[_email] 

を解析しようとしているSQLをもたらし、それが型エラーを返しました。

私はのようなクエリを実行しています:

raw_queryset = GigyaUser.objects.raw(self.sql_fetch, self._query_object['params']) 

またはカウント時:

cursor.execute(self.sql_count, self._query_object['params']) 

は、両方が( ':' を使用してインジケータを)Sqliteを上同じMariaDB上の誤りが、仕事を与える

今は何が欠けていますか?

+0

%(u_email)を使用してドキュメントに記載されているように(https://docs.djangoproject.com/en/1.8/topics/db/sql /)は "不完全なフォーマット"のエラーになるbtw –

+1

docsは '%(u_email)s'(接尾辞' s'に気付く) – yedpodtrzitko

+0

TNX !!!!! このコメントを回答として入力すると、回答としてマークすることができます。 –

答えて

4

編集:

フォーマットは以下のよう sサフィックスを持つ必要

%(u_email)s 
+0

ORMを使用しない理由があります。それは良いものです。 私はsql-injectionを恐れていません...だから問題ではありません。 –

+0

あなたは「正当な理由」を分かち合いたいですか? – yedpodtrzitko

+2

Django ormは、単純なオブジェクト関連のデータベースクエリには最適です。 しかし、データベース構造がより高度になり、正確なレポート/選択を生成する必要がある場合は、状況が悪くなります。 javascriptツールで生成された動的jsonオブジェクトに基づいて特殊な選択を生成する必要があります –

関連する問題