_ip.magic进入原始SQL查询。怎么避免呢?

时间:2012-01-26 09:04:11

标签: django django-models django-orm

当我在Django中进行原始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 个答案:

答案 0 :(得分:2)

_ip.magic就我所知的IPython函数而言,与django本身无关。

尝试在普通的vanilla django shell中运行此代码。

答案 1 :(得分: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

换句话说,其他一些代码可能会影响您的行为。