既存のSQLiteデータベースに接続し、キー列の値とデータフレームの値を比較する必要があります。データベースとデータフレーム間のすべてのキー一致に対して、その行の特定の列の値を更新します。キーがデータフレームに存在し、データベースに存在しない場合は、それぞれの行をデータベースに追加します。ターゲットは比較的大きなデータセットであるため、メモリの使用とパフォーマンスが懸念されます(20〜60 GBのdb、@〜20列、および何百万行もの可能性があります)。条件を使ってSQLite DBを更新して列の値を変更するか、新しい行を追加する
以前はデータベースをデータフレームに読み込み、古いデータフレームと新しいデータフレームをメモリにマージしようとしましたが、高価であることが判明しました(多くの場合、5ギガバイトのデータセットがメモリに20ギガヘルツになります)。
私はここのロジックで迷子だ、これは私が行ってきた最も遠いです:新しいデータで
Key First_Seen Last_Seen Data1 Data2
Bigfoot 2015 2015 Blah Blah
Loch_Ness 2016 2016 Blah Blah
UFO 2016 2004 Blah Blah
データフレームを
データベース:
def update_column(tablename, key_value):
c.execute('SELECT key FROM {}'.format(tablename))
for row in c.fetchall():
# populating this key value per row is challenging for me
if row == key_value:
c.execute('UPDATE {} SET last_seen = {} WHERE UUID = {}}'.format(tablename, hunt_date, key_value))
else:
df.to_sql(table_name, if_exists='append')
for index, row in reader.iterrows():
key_value = row['key']
update_column(tablename, key_value)
例データセット:
Key First_Seen Last_Seen Data Data
UFO 2017 2017 Blah Blah
Tupac 2017 2017 Blah Blah
データベースでの出力を希望する:
Key First_Seen Last_Seen Data Data
Bigfoot 2015 2015 Blah Blah
Loch_Ness 2016 2016 Blah Blah
UFO 2016 2017 Blah Blah
Tupac 2017 2017 Blah Blah