当我在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
答案 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
换句话说,其他一些代码可能会影响您的行为。