2012-01-26 3 views
0

Djangoで生のSQLクエリを作成すると、一部のクエリで_ip.magicが文字列に取り込まれ、文字列の書式設定でパラメータが十分でないか多すぎるため、例外が発生します。_ip.magicは生のSQLクエリになります。それを避ける方法は?

サンプルコードは、最小限のセットに縮小、それでも「魔法」を生成した。(私は成功したSQLを生成したい、このクエリを実行するという意味ではありません。)

> ids = (1, 4) 
> curr = 3 
> q = User.objects.raw(u""" 
       SELECT 
    1 
       WHERE 
        a=%s and b=%s AND a.user_id = %s 
    """, params=(ids, ids, curr)) 

> print q.query.sql 
... a = _ip.magic("s and b=%s AND a.user_id = %s") 

_ip.magicはなぜですか?クエリによっては、単一のパラメータをラップすることもあります。どのようにそれを取り除く?

編集:ソリューションはautomagicをオフにすることでした:

>>> _ip.options['automagic'] = 0 

答えて

2

_ip.magicは、私の知る限りIPython機能を伝えるとDjango自体とは何の関係もないことができますようです。

プレーンなバニラのdjangoシェルでこのコードを実行してみてください。

0

は、ここで私が得てんだよ、これよりそれにもっと何かがあるに違いありません:

In [12]: print User.objects.raw('select id from auth_user where id=%s OR id=%s', (1,2)).query 
<RawQuery: 'select id from auth_user where id=1 OR id=2'> 

In [13]: print User.objects.raw('select id from auth_user where id=%s OR id=%s', (1,2)).query.sql 
select id from auth_user where id=%s OR id=%s 

言い換えれば、いくつかの他のコードは、おそらくあなたの行動に影響を与えています。

関連する問題