我有一个MySQL查询,它使用变量生成计数器:
select
zz.work_order,
zz.op_number,
@num := if(@wo = zz.work_order, @num+1,1) as 'steps_away',
@wo := zz.work_order as 'dummyWO'
from
(
select
w.work_order,
w.op_number
from
[sql cut]
order by
w.work_order asc,
r.op_number asc
) as zz在MySQL工作台中执行此操作时,将正确填充steps_away。work_order的第一次出现具有steps_away = 1,下一次出现具有steps_away = 2等,直到看到新的工作顺序并重新设置计数器。
在Python中,我使用read_sql和to_sql函数将查询保存在DataFrame中,然后将其发送到数据库。
df = pd.read_sql(sql_cmd, engine)无论我将这个df发送给带有df.to_csv的csv,还是发送到带有df.to_sql的表,steps_away列的值都是1。
在MySQL中直接运行查询和在Python中调用查询时,是什么原因导致查询看起来正确?
更新
我又测试了一下,发现了一些奇怪的东西。当我再次尝试MySQL工作台中的查询时,steps_away中的所有值(不正确)都等于1。我立即重新运行查询,没有任何更改,然后正确地填充了值。
我在Python中添加了两次pd.read_sql行,以匹配我手动执行的操作,DataFrame现在为steps_away提供了正确的值。如果在查询中使用这个计数器会导致这种行为,有时它可以工作,有时它不能工作,并且似乎两次调用查询都可以确保计数器列被正确填充?
发布于 2016-10-24 20:53:34
看起来,这一切都与MySQL相关,与python无关。需要先将变量设置为值来初始化它们。在from部分中的另一个子查询中这样做,问题就解决了。
select
zz.work_order,
zz.op_number,
@num := if(@wo = zz.work_order, @num+1,1) as 'steps_away',
@wo := zz.work_order as 'dummyWO'
from
(
select
w.work_order,
w.op_number
from
[sql cut]
order by
w.work_order asc,
r.op_number asc
) as zz,
(
select
@num:=0,
@wo:=''
) as rhttps://stackoverflow.com/questions/39838143
复制相似问题