2016-08-09 11 views
0

sql.dbファイルに6つのテーブルがあります。私が現在ループを作成してSQLデータベースを更新できますか?

for each_item in df.index: 
# Note: The name of the tables in the database is the variable 'each_item' 
    pd.Dataframe.to_sql(df, con=engine, name=each_item, if_exists='append', index=False) 

    # The below code does not work. And I have no idea why 
    for each_columns in df.columns: 
     connection.execute('UPDATE each_item SET each_columns = NULL WHERE each_columns = '-') 
を持つセルの値が -

コードであれば、この6つのテーブル内の各列を通過するループを作成し、NULLに値を変換することが可能であるならば、私は思っていました

これはエラーを生成するようです。

は、どのように私は、もしセルの値= -sql.db内のすべてのtablesを通過し、tablesで一人ひとりcolumnを更新することができていますように、それをコード化すべきですか?

より具体的には、私が得たエラーは、テーブルを見つけることができないと言います。 no such table: each_item

+0

tbh idちょうどwhileループに入れます – thesonyman101

+0

ありがとうございますが、私の問題で私を助けません。変数にテーブル名を入れると 'tables'を見つけることができないようです。 –

+0

サーバに接続していますか?もちろん – thesonyman101

答えて

1

あなたのコードにはかなりの問題があります。のは、一度にそれぞれに対処しましょう。この場合your_dataframe.to_sqldf.to_sqlの略

  1. pd.DataFrame.to_sql。これはDataFrameオブジェクトのメソッドであり、そのオブジェクトは作成したDataFrameです。これが混乱する場合は、Pythonのクラスとメソッドについて読んでください。
  2. to_sqlは、スキーマ名、その後、接続、その後、テーブル名とその最初の引数を取り、あなたはSQLへの書き込みしようとした前に、あなたはすべての変換をした場合、最終的if_existsとインデックスkwag
  3. それは良いだろう。それだけで物事をきれいにする。さらに、DataFrameが正しくdtypedされている場合、問題のデータベースエンジンのNaN値は自動的に適切なNULL値表現に変換されます。

    for each_item in df.index: # I would avoid a syntax like this. Better to have the DataFrames in a list, than iterate through a DataFrame 
        df.loc[each_item].to_sql(name=each_item, con=engine, if_exists='append', index=False) # Here again, I would avoid using the name engine for a connection to a database engine 
    

    しかし、上記のコードの成功は、私はそれを締結され、あなたのデータフレームが正常にデータが入力されてによって異なります。あなたは上記のすべての点を考慮すれば

が、これは、それが行われるべきかでありますあなたがこの質問をしたからではありません。 DataFrameのサンプルを使って質問を編集すると、あなたのdtypeが正しいものになるのを助けることができます。


ps。 DataFrameのマージに関する以前の質問の結果としてDataFrameが作成された場合は、私に知らせてください。ここでは、両方の質問に対する包括的な解決方法を提供します。しかし、この質問のデータを使ってこの質問を編集し、この質問を読んでいる人々が困惑しないようにしてください。

関連する問題