2017-01-12 6 views
-2

私はPythonの初心者ですので、構文も間違っている可能性があります。私はバルク私のSQLデータベースを更新したい。私はすでにNULL値でデータベースに列を作成しています。私の目標は、Python上で移動平均を見つけ、その値を使ってデータベースを更新することです。しかし、問題は、私が見つけた移動平均は、列が時間ブロックで行が日付であるデータテーブル形式にあるということです。しかし、データベースでは、日付と時刻の両方のブロックが異なる列になります。Pythonで結果を使ってmysqlデータベースを更新する

MA30 = pd.rolling_mean(df, 30) 

cur.execute(""" UPDATE feeder_ndmc_copy 
      SET time_block = CASE date, (MA30)""") 

db.commit() 

これはエラーです。

self.errorhandler(self, exc, value) 

私は他の多くの質問回答を見ましたが、pythonコマンドの発見を使ってデータベースを更新する方法の例はありません。助言がありますか?

+0

あなたはpythonから得ている正確なエラーは何ですか?これはMySQL CLIから機能しますか? – Claris

+0

エラーメッセージとスタックトレースを投稿してください。あなたが投稿したものは、スタックトレースのほんの一部にしか見えません。また、あなたの例は完全ではありません。人々があなたの手助けをしやすくする方法については、http://stackoverflow.com/help/mcveをご覧ください。一つのことは、SQLクエリに変数 'MA30'を挿入しようとしているようです。この方法については、文字列MA30を挿入するようにSQL APIに指示します。データベースのスキーマを知らなくても、あなたのためにクエリを作成するのはちょっと難しいです。 – sobek

+0

私はMysqlの使い方がわかりません。私はこの分野に新しいです。 @Claris – user7400738

答えて

1

[OK]をクリックすると、質問に含まれる情報がまったくなくても完全な回答が得られませんが、どうすればこの問題に対処できるか説明していきます。

おそらく最も簡単な方法は、更新する行ごとに個別のUPDATEクエリを自動的に書き込むことです。私が誤解していないなら、これはデータベース側では比較的効率的ですが、Pythonプログラムではオーバーヘッドが発生します。私はデータベースの人ではありませんが、あなたの質問ではパフォーマンスの最適性について言及していないので、私は今のところうまくいくソリューションがあればいいと思います。

データベースとのやりとりを処理するためにsqlalchemyを使用します。コードをコピーしたい場合は、sqlalchemyをインストールして、コードにモジュールをインポートする必要があります。

まず、sqlalchemyエンジンを作成する必要があります。私はローカルデータベースを使用していると仮定します。そうでなければ、この部分を編集する必要があります。

engine = sqlalchemy.create_engine('mysql://localhost/yourdatabase') 

は今、私も何もあなたの時間の形式を知っていますか私は更新したい列の名前がわからないので、私はプレースホルダを使用します(すべての私たちのクエリを含む文字列を作成することができますありませんインデックス、私は推測する必要があります):

queries = '' 
for index, value in MA30.iterrows(): 
    queries += 'UPDATE feeder_ndmc_copy SET column_name = {} WHERE index_column_name = {};\n'.format(value, index.strftime(%Y-%m-%d %H:%M:%S)) 

あなたの要件に合わせてこの部分を大きく調整する必要があります。私はあなたのデータベースの適切なスキーマを提供しなければ、それ以上のことはできません。完全なクエリのリストで

、我々はSQLにデータを入れて進みます

with engine.connect() as connection: 
    with engine.begin(): 
     connection.execute(queries) 

編集:

明らかに私の解決策は、あなたのパンダの場合のようなものをどのような方法で対処していませんmysqlにないタイムスタンプのデータポイントを作成する操作などがあります。そのことを覚えておく必要があります。それが問題であれば、フォームのクエリを使用する必要があります

INSERT INTO table (id,Col1,Col2) VALUES (1,1,1),(2,2,3),(3,9,3),(4,10,12) 
ON DUPLICATE KEY UPDATE Col1=VALUES(Col1),Col2=VALUES(Col2); 
+0

ありがとうございました!私はそれが私が望む望みの結果に到達するのを助けてくれたと思う。もう一度おねがいします@sobek – user7400738

関連する問題