2012-01-26 6 views
0

Django에서 원시 SQL 쿼리를 만들 때 일부 쿼리는 _ip.magic을 문자열로 가져온 다음 충분하지 않거나 너무 많은 매개 변수가 없기 때문에 문자열 형식화가 예외를 발생시킵니다.원시 SQL 쿼리에 _ip.magic이 추가되었습니다. 어떻게 피하는가?

샘플 코드는 최소한으로 감소하지만, 여전히 "마법"을 생산했다 :

> 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") 

(난 그냥 성공적으로 SQL을 생성 할,이 쿼리를 실행하는 것을 의미하지 않습니다.)

_ip.magic이 있습니까? 쿼리에 따라 때로는 단일 매개 변수를 래핑하고 때로는 매개 변수 중 일부를 래핑합니다. 그것을 제거하는 방법?

편집 : 솔루션은 automagic을 해제했다 :

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

답변

2

_ip.magic는 지금까지 내가 IPython 기능을 말해 장고 자체와는 아무런 관련이 없습니다 수 있습니다.

일반 바닐라 장고 껍질에서이 코드를 실행 해보십시오.

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 

즉, 다른 코드는 아마 당신의 행동에 영향을 미치는된다.