2017-01-10 8 views
0

私はデータベースから絶えず更新された情報をAPIから取り除いています。私が得たデータは不完全かもしれませんが、私はそのほとんどを持っているはずです。これまで私はデータベースに行を挿入しようとするtry/except節を持っていますが、行を更新する以外は例外があります。主な問題は、私は行を削除しないということです。私はいつでもサーバーのデータのコピーを持っている、または少なくともそれに近づきたいと思っています。私は何とか私が時間をかけて削除する必要がある行を追跡しておく必要があります。なぜなら、それは私に不完全なデータを与えるスクレイパーだけではないことを確認したいからです。 ところで私はPythonとpsycopg2を使用しています。 これは一般的な問題だと思いますが、新しいデータベースを作成し、現在持っているものと数回更新してからデータベースを置き換える方が良い解決策を見つけることができません。助言がありますか?私は例外条項がここで頻繁にトリガーされることを期待しているという事実も好きではありません....postgresqlの更新/挿入と削除によってデータベースをコピーします。

ありがとうございます!

答えて

1

upsert(MySQL INSERT ... ON DUPLICATE KEY UPDATEに相当)が不足しているのは、PostgreSQL側では長い間悩まされています。一般的には、あなたのアプローチが最良の方法です。ただし、それは原子ではないという点で問題があります。例外がスローしてから試して更新するまでに、その行は別のプロセスによって更新されている可能性があります。しばしば、これは人々に不変の行を構築させますが、それは別の話題です。

Postgres 9.5の時点でUpsert節が追加されました。 INSERT ... ON CONFLICT ... DO ...Documentation here)。

他の調査では、より包括的な答えがここに表示されます:https://stackoverflow.com/a/17267423/1327710

+0

Upsertはいいようですが、削除は管理していませんか?また、データベースにID列を追加したいと思います。これが唯一のユニークな列になるので、紛争が起こることはありませんか?私が得るデータのようにIDはありません。それが最初に挿入されるときに私はそれに割り当てます。しかし、私は行を一致させる必要があると思うし、何とか更新するために競合を投げる?ご協力いただきありがとうございます! –