使用 cursor.execute("),django 会在我们使用@var的任何地方返回 NULL,但是当我们打印出cursor._executed并在我们的 mysql 客户端中运行它时,它可以完美运行。
我们的 django + mysql 的例子:
cursor.execute("""
select
@varA := a.property as `my prop`,
@varA / 100 as `calc prop`
from
my_table a;
""")
返回的数据将是:
[
{
'my prop' : 1234,
'calc prop' : null
}
]
django在这里做什么,我错过了一些明显的东西吗? :S
任何指示或想法将不胜感激,干杯
不得不问,你在这里的用例是什么?Django 的 ORM 可以很容易地用于查询这样的表,如果它是app.Model
的一部分。它有足够的表现力,允许像你的问题一样操纵值:
from django.db.models import F
results = MyTable.objects.annotate(my_prop='property', calc_prop=F('property') / 100)
无论如何,在您希望在ORM之外执行查询的特殊(/罕见)情况下,请使用原始SQL查询。
如果这还不够,对于真正细粒度的直接数据库访问,您可以依赖 cursor.execute()
,但正确的方法是获取游标执行的结果,如文档中所述:
cursor.execute("""
select
@varA := a.property as `my prop`,
@varA / 100 as `calc prop`
from
my_table a;
""")
one_result = cursor.fetchone()
all_results = cursor.fetchall()