2016-10-03 5 views
0

を使用していない私はカウンターを生成するために、変数を使用してMySQLのクエリを持っています。 work_orderの最初のオカレンスにはsteps_away = 1があり、次のオカレンスにはsteps_away = 2などがあり、新しい作業指示が見られ、カウンタがリセットされます。MySQLのカウンタ列が正しく移入Pythonとパンダ

Pythonでは、私はpandasのread_sqlとto_sql関数を使用してクエリをDataFrameに保存し、それをデータベースに送信します。私はdf.to_sqlでdf.to_csvまたは表をCSV形式にこのDFを送信するかどうか

df = pd.read_sql(sql_cmd, engine) 

、steps_away列はすべての方法ダウン値1を有しています。

Pythonで呼び出されたときにMySQLとMySQLで直接実行されると、クエリが正しく表示される原因は何ですか?

UPDATE

私はいくつかのより多くの本をテストし、奇妙なものを見つけました。私がMySQL Workbenchでクエリを再試行したとき、steps_awayの値はすべて1に等しくなりました。変更を加えずにすぐにクエリを再発行し、値が正しく設定されました。

私は手動で行ったものと一致するように、Pythonでpd.read_sql行を2回追加しました。これで、DataFrameはsteps_awayの正しい値を持つようになりました。クエリでこのカウンタを使用すると、この動作が発生することがあります。時にはうまく機能しない場合があります。また、クエリを2回呼び出すと、カウンタ列が正しく読み込まれるようになることがあります。

答えて

0

これはすべて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 r 
+0

自己紹介 – gtm

関連する問題